vector<int> v1
vector 中的erase是这样描述的:v1.erase(pos) // 删除pos位置的数据,传回下一个数据的位置。
但是我们在删除相同元素时会发生错误:
int main()
{
int a[] = {3,2,3,4,2,2,2,2,5};
vector<int> iVec(a, a+sizeof(a)/sizeof(a[0]));
vector<int>::iterator it = iVec.begin();
for ( ; it != iVec.end();++it)
{
if (*it == 2)
{
iVec.erase(it);
}
}
}
这样元素2被删除后,it成了野指针了,++it就找不到地方,所以会出现崩掉,那么我像网上众多的转帖说的那样修改行不行呢?
vector<int>::iterator it = iVec.begin();
for ( ; it != iVec.end();)
{
if (*it == 2)
{
it = iVec.erase(it);
}
else
{
++it;
}
}
这样也是可以的,或者我们也可以这样修改:
vector<int>::iterator it = iVec.begin();
for ( ; it != iVec.end();++it)
{
if (*it == 2)
{
it = iVec.erase(it);
--it;
}
}
最后,不足之处请大家指正,共同进步