迭代器的使用--关于迭代器的失效
这是程序员面试宝典上的一个小题。
要点是:使用erase之后迭代器失效。
实际上失效是指原来的迭代器,在删除一个元素之后,自动指向了下一个元素。
测试代码如下,删除容器中的值为6的所有元素。
A 错误的代码为:
#include <iostream>#include <vector>using namespace std;void print(vector<int>);int main(){ vector<int> array; array.push_back(1); array.push_back(6); array.push_back(6); array.push_back(3); vector<int> :: iterator itor; for (itor = array.begin(); itor != array.end();) { if (6 == *itor) { array.erase(itor); } else itor++; } cout << "vector size is: " << array.size() << endl; for (itor = array.begin(); itor != array.end(); itor++) { cout << *itor << " " << endl; } return 0;}
可见,使用了erase之后,迭代器自动指向了下一个元素。