C++ vector容器的基本操作
程序员文章站
2022-03-01 23:25:27
...
C++ vector容器的基本操作
#include <iostream>
#include <vector>
using namespace std;
/*
vector是将元素置于一个动态数组中加以管理的容器
vector可随机存取元素(索引[]、at())
vector在尾部添加或删除元素非常快速,但是在中部或头部插入或删除元素非常费时
vector采用模板类实现
容器元素的存放是按值复制完成的,必须提供复制构造函数
*/
void printVec(vector<int>& v)
{
for (int i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
cout << endl;
}
int main()
{
vector<int> v1;
//1 数组元素的添加和删除
cout << "length: " << v1.size() << endl;
v1.push_back(1);//尾插
v1.push_back(3);
v1.push_back(7);
cout << "v1头部元素: " << v1.front() << endl;
//修改头部元素
v1.front() = 10;//函数返回值当左值,故返回的是引用&
v1.back() = 20;//修改尾部元素
while (v1.size() > 0)
{
cout << "v1尾部元素: " << v1.back() << endl;
v1.pop_back();//删除尾部元素
}
//2 vector的初始化
int iArray[] = { 0,1,2,3,4 };
//将[begin, end)区间中的元素拷贝给本身,区间左闭右开
vector<int> vecIntA(iArray, iArray + 5);
vector<int> vecIntB1(vecIntA.begin(), vecIntA.end());
vector<int> vecIntB2(vecIntA.begin(), vecIntA.begin() + 3);
vector<int> vecIntC(3, 9);//3个9
vector<int> vecIntD(vecIntA);//vecIntD = vecIntA;
//3 vector的遍历 通过数组的方式
vector<int> v2(10);//提前把内存准备好
for (int i = 0; i < v2.size(); i++)
{
v2[i] = i + 1;
cout << v2[i] << " ";
}
cout << endl;
printVec(v2);
//4 vector的迭代器遍历和迭代器的种类
//迭代器用于遍历,相当于一个指针
//4.1 正向遍历
for (vector<int>::iterator it = v2.begin(); it != v2.end(); it++)//v2.end()指向10的后一位置
{
cout << *it << " ";
}
cout << endl;
//4.2 逆序遍历
for (vector<int>::reverse_iterator rit = v2.rbegin(); rit != v2.rend(); rit++)
{
cout << *rit << " ";
}
cout << endl;
//5 vector的删除
//5.1 区间删除
v2.erase(v2.begin(), v2.begin() + 3);
printVec(v2);
//5.2 根据元素的位置删除
v2.erase(v2.begin() + 1);//参数必须是一个迭代器
printVec(v2);
//v2.erase(0);//错误
//5.3 根据元素的值删除
for (vector<int>::iterator it = v2.begin(); it != v2.end();)
{
if (*it == 9)
{
it = v2.erase(it);//返回一个迭代器,删除后会自动移到下一位置
//it++;//不需要
}
else
{
it++;
}
}
printVec(v2);
//6 vector的插入
//6.1 在pos位置插入一个elem
v2.insert(v2.begin(), 1);
printVec(v2);
//6.2 在pos位置插入n个elem
v2.insert(v2.begin() + 2, 4, 8);
printVec(v2);
//6.3 在pos位置插入[beg, end)区间的数据
v2.insert(v2.end(), vecIntA.begin(), vecIntA.end());
printVec(v2);
return 0;
}
上一篇: mysql免费版好用么
下一篇: mysql怎么输入