迭代器的失效问题
第一种场景:
首先咱们先用库里面自带的vector容器,把容器中所有偶数删除
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec;
for (int i = 0; i < 20; ++it)
{
vec.push_back(rand() % 100 + 1);
}
//把容器中所有偶数删除
auto it = vec.begin();
for (; it != vec.end(); ++it)
{
if (*it % 2 == 0)
{
//迭代器失效的问题第一次调用erase之后,迭代器it就失效了
vec.erase(it);//erase是vector底层提供的删除方法,把it指向的当前元素删除掉
}
}
return 0;
}
当我们执行程序之后,会发现进程意外中止。这是因为第一次调用erase之后,迭代器it就失效了 ,之后的for循环内的 ++it 操作就是出错。
如果只删除一次,则进程正常结束。
for (; it != vec.end(); ++it)
{
if (*it % 2