#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
vector<int> vec = {1,2,3,3,4,5};
for (vector<int>::iterator iter = vec.begin(); iter != vec.end(); iter++)
{
cout << *iter << endl;
if (3 == *iter)
{
vec.erase(iter);
}
}
return 0;
}
代码目标是想删除所有的3.
执行到调用vec.erase(iter)时,iter指向第一个3,执行完vec.erase(iter)后,此时iter所在内存空间已被释放。再执行iter++触发异常。
总结:
使用 erase()方法:
① iter = vec.erase(iter)更新iter,且此时iter已经指向下一个元素。一定要返回值
②iter已经指向下一个元素,小心iter++ 多加了一次。