1.定义
vector<int>a={1,2,3,4};
2.删除
利用迭代器删除bug
for(vector<int>::iterator itr=a.begin();itr!=a.end();itr++)
{
if(*a==2){
a.erase(itr);
//FIX 修改的话加上break;停止访问就可以了
}
}
3.错误
编译显示内存访问错误,原因:
原先的vector a:
itr | Value |
---|---|
0(a.begin()) | 1 |
1 | 2 |
2 | 4 |
3 | 5 |
4(a.end()) | NULL |
执行过a.erase(itr)后的vector a:
itr | Value |
---|---|
0(a.begin()) | 1 |
1 | 4 |
2 | 5 |
3(a.end()) | NULL |
在itr位置发生改变后for循环的截止位置依旧是原先的a.end()-1,也就是最后访问的是itr为3的位置,而在改变后的vector中itr为3的位置为内存非法访问区,所以发生了内存访问错误。