容器遍历删除特定条件元素应注意迭代器的增加方式
2013-05-10 10:51
330 查看
1.首先要确定该容器删除操作后返回的迭代器指向哪个元素
2.是否返回迭代器
在vector容器中
所以在循环中,如果删除了元素,就无需添加自增,如果没有,就要++
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++;
}
}
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++;
}
}
相关文章推荐
- stl容器在循环遍历中删除元素的方式
- std::map 通过遍历删除满足某些条件元素的两种方式
- std::map 通过遍历删除满足某些条件元素的两种方式
- std::map 通过遍历删除满足某些条件元素的两种方式
- STL之容器:选择时机,删除元素,迭代器失效
- 删除容器中元素时的迭代器失效问题
- map容器(元素的添加/遍历/删除)
- 集合框架(增加,删除,判断元素以及迭代器)
- 如何处理C++删除容器中元素时导致的迭代器失效问题
- 编程技巧系列(2)Java 集合(List,Set,Map)遍历时有条件删除特定元素
- C++ Primer 9.35——循环遍历vector容器删除指定元素的标准写法
- 关于边遍历vector元素边删除vector元素需要注意的
- vector, list, map在遍历时删除符合条件的元素
- 实现Vector容器的增加、删除、排序(算法函数排序)、遍历、复制操作
- Map遍历的两种方式(首推entrySet())--遍历Map时删除元素的方法
- 集合遍历时删除和增加元素
- 迭代器遍历元素注意事项
- 删除元素【C++】顺序容器 Vector 注意事项
- STL中迭代器失效——用erase()方法遍历删除元素
- Java动态 遍历List 时删除List特征元素 异常问题 及解决方式总结