在用Vector删除某一个元素的时候经常互出现不可思议的情况,例如:
vector<int> count;
count{0,0,0,437,0,0,0};
想要删除count中的0元素,使用如下程序:
vector <int>::iterator Iter;
for (Iter=count.begin();Iter!=count.end();Iter++)
{
if (*Iter==0)
{
count.erase(Iter);
Iter=count.begin();
}
}
经过处理后,count中仍然有0元素,输出的值为0,437。具体的原因:
问题出在for里的“Iter++”,留下的那个0应该是第二个0,因为删除第一个0后你重新赋值iter为begin(),由于已经删除第一个0,所以此时的begin为第二个0,然后经过第一次iter++,即iter指向第三个0,此时删除第三个0,然后有一次赋值begin(),重新指向第一个0,而for循环又到了iter++所以此时iter指向了437,如此类推,后面的所有0都没了,就剩下“0,437”!
修正代码如下:
vector <int>::iterator Iter;
for (Iter=count.begin();Iter!=count.end();)
{
if (*Iter==0)
{
count.erase(Iter);
Iter=count.begin();
}
else
{
Iter++;
}
}