【STL】vector小结

来源:互联网 发布:pdf锐化软件 编辑:程序博客网 时间:2024/05/22 14:31

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(); //删除全部元素
原创粉丝点击