迭代器失效是初学者使用迭代器经常会忽略的一类问题,常见的导致迭代器失效的操作有:
- insert
- erase
- sort
- push
尤其要注意的就是erase
操作,是返回一个迭代器的,在循环中不接收其返回值就很容易造成迭代器失效。
以下代码为最简单的一个迭代器失效的demo,造成迭代器失效的原因是sort
操作导致容器发生改变,原迭代器失效。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> vecNums = { 1,2,5,20,10,15 };
vector<int>::iterator it = vecNums.end();
vecNums.push_back(8);
sort(vecNums.begin(), vecNums.end());
if (it == vecNums.end())
cout << "it is Exist" << endl;
else
cout << "it is not Exist" << endl;
}
输出:
it is not Exist