C++中vector容器不管是插入或者删除,会导致内存重新分配,迭代器也会失效。下面对迭代器失效问题进行分析和解决
#include <iostream>
#include <vector>
#include <list>
#include <deque>
using namespace std;
void disp(vector<int> & x) //定义disp函数用以输出容器对象所有元素
{
vector<int>::iterator it = x.begin();
while (it != x.end())
{
cout << (*it) << " ";
it++;
}
}
int main()
{
//1. 创建一个vector<int>容器对象
vector<int> obD(5, 0);
//2. insert()的重载形式
vector<int>::iterator pD = obD.end(); //创建迭代器pD
pD = obD.insert(pD, 1); //在尾部插入元素,并使迭代器指向新插入的
disp(obD);
cout << endl;
//3. insert()的重载形式
obD.insert(pD, 2, 3); //在新插入的元素之前插入两个元素
disp(obD);
cout << endl;
//4. insert()的重载形式
pD = obD.begin(); //很重要,插入后,原来的迭代器可能失效
int sz[3] = {7,8,9};
obD.insert(pD, sz, sz + 3); //将两个指针(相当于迭代器)插入到头部
disp(obD);
cout << endl;
//5. 上述插入操作对list, vector, deque三种容器都适合. 可自行测试
getchar();
return 0;
}