您的位置:首页 > 其它

容器遍历删除特定条件元素应注意迭代器的增加方式

2013-05-10 10:51 330 查看
1.首先要确定该容器删除操作后返回的迭代器指向哪个元素

2.是否返回迭代器

在vector容器中

c.erase(p)
Removes element referred to by the iterator p.
删除迭代器 p 所指向的元素
Returns an iterator referring to the element after the one deleted, or an off-the-end iterator if
p referred to the last element. Undefined if p is an off-the-end iterator.
返回一个迭代器,它指向被删除元素后面的元素。如果 p 指向容器内的最后一个元素,则返回的迭代器指向容器的超出末端的下一位置。如果
p 本身就是指向超出末端的下一位置的迭代器,则该函数未定义
c.erase(b,e)
Removes the range of elements denoted by the iterators b and
e.
删除迭代器 b 和 e 所标记的范围内所有的元素
Returns an iterator referring after the last one in the range that was deleted, or an off-the-end iterator if
e is itself an off-the-end iterator.
返回一个迭代器,它指向被删除元素段后面的元素。如果 e 本身就是指向超出末端的下一位置的迭代器,则返回的迭代器也指向容器的超出末端的下一位置
所以在循环中,如果删除了元素,就无需添加自增,如果没有,就要++

std::vector<Vec3f>::iterator itc = circles.begin();
while(itc != circles.end())
{
//std::cout<<".";
if(OverLine(*itc,image.size().width,image.size().height,10)){
itc=circles.erase(itc);
}else{
itc++;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: