【STL】vector小结
程序员文章站
2022-07-12 22:51:08
...
vector是最简单的序列式容器,支持随机访问元素,类似一个动态数组。使用vector时应当包含头文件< vector >.
定义与初始化
vector<int> vt;
vt.reserve(5); //在初始化之前应当先设置容器的容量
vt.push_back(1); //使用push_back()函数向尾部添加元素
vt.push_back(2);
vt.push_back(3);
大小与容量
vector的大小是指容器中现有的元素数量,由函数size()的返回值获取,函数resize()可以修改容器大小。
vector的容量是指容器实际可以容纳的元素数量,由函数capacity()的返回值获取,函数max_size()可以返回容器可以容纳的最大元素数量。
访问元素
vector容器对元素的操作方法主要有如下几种方式:
vector<double> vt;
vt[index]; //类似数组下标的用法,返回引用,不可用这种方式初始化
vt.at(index); //与方括号的使用方式类似,返回引用
vt.front(); //返回第一个元素
vt.back(); //返回最后一个元素
迭代器相关函数
下面的函数均返回一个迭代器。
vt.begin(); //指向第一个元素
vt.end(); //指向最后元素的下一个位置
vt.rbegin(); //指向逆向迭代的第一个元素
vt.rend(); //指向逆向迭代最后元素的下一个位置
遍历容器
可以使用at()函数实现遍历, 也可以使用迭代器来实现。
//使用at()函数遍历,也可用[]实现
vector<int> vt;
for(int i = 0; i < vt.size(); i++){
cout<<vt.at(i)<<endl;
}
//使用迭代器实现遍历
vector<int>::iterator it;
for(it = vt.begin(); it != vt.end(); it++)
{
cout<<*it<<endl;
}
//使用逆向迭代器实现逆向遍历
vetor<int>::reverse_iterator it2;
for(it2 = vt.rbegin(); it != vt.rend(); it2++)
{
cout<<*it2<<endl;
}
另外可以通过使用算法头文件< algorithm >中的for_each()函数实现类似遍历个功能。
#include<algorithm>
void out(int &n)
{
cout<<n<<endl;
}
vector<int> vt;
for_each(vt1.begin(), vt1.end(), out); //正向遍历
for_each(vt1.rbegin(), vt1.rend(), out); //逆向遍历
插入
可以使用push_back()函数向末尾添加元素,也可以使用insert()函数像任意位置插入元素。
vector<int> vt;
vector<int>::iterator it;
vt.reserve(10);
vt.push_back(1);
vt.push_back(2);
vt.insert(vt.begin(), -1); //向迭代器所指位置之后插入一个元素
vt.insert(vt.end(), 2, 0); //向迭代器所指位置之后插入多个相同个元素
//注意迭代器it在这里的使用方式
it = vt.begin();
vt.insert(it+2, 2, 3); //向迭代器所指位置之后插入多个相同个元素
for(int i = 0; i < vt.size(); i++)
cout<<vt[i]<<' ';
cout<<endl;
输出结果
-1 1 3 3 2 0 0
删除
注意erase()函数返回一个迭代器,指向被删除元素后面的位置
vector<int> vt;
vector<int>::iterator it;
it = vt.begin();
vt.pop_back(); //删除最后一个元素
it = vt.erase(it+2); //删除迭代器所指的元素
vt.erase(it, vt.end()); //删除指定范围内的元素
vt.clear(); //删除全部元素
上一篇: STL vector 小结
下一篇: STL 源码分析-Vector