#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
vector<int>array;
array.push_back(100);
array.push_back(300);
array.push_back(300);
array.push_back(300);
array.push_back(300);
array.push_back(500);
vector<int>::iterator itor;
for(itor=array.begin();itor!=array.end();itor++)
{
if(* itor==300)
{
itor=array.erase(itor);
}
}
for(itor=array.begin();itor!=array.end();itor++)
{
cout<<*itor<<" ";
}
return 0;
}
A.100 300 300 300 300 500
B.100 3OO 300 300 500
C.100 300 300 500
D.100 300 500
E.100 500
F.程序错误
解析:C
for(itor=array.begin();itor!=array.end();itor++)
{
if(* itor==300)
{
itor=array.erase(itor);
}
}
这个代码也存在缺陷,我们无法连续删除数字300,迭代器在指向vec.end()的时候,会进行一次++,这就发生了数组越界,所以我们一概这样修改:
for(auto iter=vec.begin();iter!=vec.end(); )
{
if( *iter == 300)
iter = veci.erase(iter);//当删除时erase函数自动指向下一个位置,就不需要进行++
else
iter ++ ; //当没有进行删除的时候,迭代器++
}