int main()
{
vector<int> v;
v.reserve(10);
for(int i=0;i<10;i++)
v.push_back(i);
for(vector<int>::const_iterator iter=v.begin();iter!=v.end();iter++) {
if(*iter==5)
v.erase(iter);
}
for(vector<int>::const_iterator iter=v.begin();iter!=v.end();iter++)
cout<<*iter<<endl;
return 0;
}
我确定它是。它应该像下面这样,否则它会崩溃。
for(vector<int>::const_iterator iter=v.begin();iter!=v.end();) {
if(*iter==5)
iter=v.erase(iter);
else
iter++;
}
然而,当我运行第一个程序时,它输出:0,1,2,3,4,6,7,8,9。我一遍又一遍地阅读C ++入门书,并用Google搜索,感到困惑。
答案 0 :(得分:3)
来自erase:
在擦除点或之后使迭代器和引用无效,包括end()迭代器。
基本上,这意味着第一个代码片段是Undefined Behavior。
而且,由于它是未定义的行为,可能发生任何事情(不需要崩溃,程序可能会在未来的某个时刻出现,因为它会突然崩溃)。< / p>