vector::erase方法的使用时,需要注意下面的情况。
在查找某个值为0的元素并进行删除时,有时我们会这样写:
for(Iter = myvec.begin(); Iter != myvec.end(); Iter++)
{
if(*Iter == 0)
{
myvec.erase(Iter);
}
}
需要注意的是这样写会出现错误,因为如果vector中有多个值为0的元素时,在做第一次删除后,Iter变成了野指针,因此在后面的删除就会出现错误。
可以写成这样:
for(Iter = myvec.begin(); Iter != myvec.end(); Iter++)
{
if(*Iter == 10)
{
myvec.erase(Iter);
Iter = myvec.begin();
}
}
即在Iter变成野指针后重新指定Iter的值。
也可以利用erase方法的返回值这样写:
for(Iter = v1.begin(); Iter != v1.end(); Iter++)
{
if(*Iter == 10)
{
Iter = v1.erase(Iter);//Iter为删除元素的下一个元素的迭代器
}
if(Iter == v1.end())
{
break;
}
}