1.vector类对象的初始化
在其尾部插入元素:
#include <iostream> #include <vector> #include <algorithm> void main() { vector<int> vecInt; vecInt.push_back(1); vecInt.push_back(2); vecInt.push_back(3); vecInt.push_back(4); vecInt.push_back(5); vecInt.push_back(5); vecInt.push_back(6); }
2.vector容器中元素的遍历
(1).迭代器遍历
vector<int>::iterator iter; for (iter = vecInt.begin(); iter != vecInt.end(); iter++) { cout << *iter << ","; } cout << endl;
(2).数组形式遍历
for (int i = 0; i < vecInt.size(); i++) { cout << vecInt[i] << ","; } cout << endl;
(3).at()函数遍历
for (int i = 0; i < vecInt.size(); i++) { cout << vecInt.at(i) << ","; } cout << endl;
以上三种遍历方法输出结果:
3.size()和capacity()的区别
(1).函数size()和capacity()可以统计容器中元素的数量,size函数返回容器中现有的元素数量;
capacity()函数返回容器中实际能够容纳的元素数量.
vector<int> vecInt; vecInt.reserve(10);//预先设置容器的大小 vecInt.push_back(1); vecInt.push_back(2); vecInt.push_back(3); vecInt.push_back(4); vecInt.push_back(5); vecInt.push_back(5); vecInt.push_back(6); cout << "size:" << vecInt.size() << endl; cout << "capacity:" << vecInt.capacity() << endl;
结果如下:
4.删除vector容器中的元素
删除容器中的元素,可以使用3个成员函数:pop_back(),erase()和clear;
pop_back()函数删除最后一个元素, 函数erase()可以删除由迭代器指定的元素,也可以删除区间范围
内的元素,clear函数实现删除向量vector的所有元素,相当于erase(begin(), end()).
(1).pop_back()函数的使用
while (!vecInt.empty()) { //返回尾部元素 cout << vecInt.back() << ","; //删除尾部元素 vecInt.pop_back(); }
(2)erase()函数的使用(返回值为迭代器,它指向删除元素的下一个元素)
注意:这种情况会导致程序崩溃,因为在删除指定元素后,iter就已经成为野指针,对野指针++是不可取的
vector<int>::iterator iter; for (iter = vecInt.begin(); iter != vecInt.end(); iter++) { //删除数值为5的元素 if (5 == *iter) { vecInt.erase(iter); } }
因为erase删除指定元素后,返回的迭代器指向下一个元素,在进行下次循环后,实际上是进行了两次后移,
所以无法删除相邻的指定元素
vector<int>::iterator iter; for (iter = vecInt.begin(); iter != vecInt.end();iter++) { if (5 == *iter) { iter = vecInt.erase(iter); } }
输出结果:
vector中的erase的正确用法:erase删除指定元素后,返回的迭代器指向删除元素的下一个元素,
因此用自减来抵消它的自动后移.
vector<int>::iterator iter; for (iter = vecInt.begin(); iter != vecInt.end(); iter++) { if (5 == *iter) { iter = vecInt.erase(iter); iter--; } }
输出结果: