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++入门书,并在谷歌上搜索它,仍然感到困惑。
从擦除:
使擦除点处或之后的迭代器和引用失效,包括 end(( 迭代器。
基本上,这意味着第一个代码片段是未定义的行为。
而且,由于它是未定义的行为,任何事情都可能发生(崩溃不是必需的,程序可能会像您预期的那样运行,直到将来的某个时刻突然崩溃(。