容器的插入insert和erase操作可能导致迭代器失效,对于erase操作不要使用操作之前的迭代器,因为erase的那个迭代器一定失效了,正确的做法是返回删除操作时候的那个迭代器。
下面是参考的一个例子。
#include <vector>
using namespace std;
int main(int argc, const char *argv[]) {
int arr[5] = { 1, 2, 3, 4, 5 };
vector<int> iVec(arr, arr + 5); //定义容器vector
//迭代器失效
// for (vector<int>::iterator it = iVec.begin(); it != iVec.end();) {
// iVec.erase(it);
// }
//返回erase操作之后的迭代器
for (vector<int>::iterator it = iVec.begin();it != iVec.end();) {
it = iVec.erase(it);
}
return 0;
}
实际使用过程中碰到vector使用erase操作往往 程序会出错,就是因为每次erase后原来迭代器已经失效,这里 it = iVec.erase(it)保存删除操作时候的那个迭代器。