vector中如何按条件删除元素

按条件删除最容易想到的方法是用迭代器遍历向量,满足条件者删除之。

然而用erase处理过的迭代器会失效。

在C++11中erase的返回值是下一个迭代器,因此可以这样用:

itr=vec.erase(itr);

最好的解决办法是不用迭代器。用algorithm里的remove或者remove_if方法。这两个方法会把向量中所有满足条件的元素删除。

这里要注意的是,删除操作截短了向量,在原向量的尾部,也就是新向量尾部之后,会有一段垃圾段落。需要用erase的一个重载:

erase(itr1,itr2)删除掉。这次看起来多余的erase的调用是因为remove仅仅是将新向量的尾部作为返回值返回,而没有直接更改向量长度导致的。

例子:

vec.erase(remove_if(vec.begin(),vec.end(),[](Param param){

return (/*TODO:*/)?true;false;

}),vec.end());

 

posted @ 2013-06-19 18:53  farseeraliens  阅读(631)  评论(0编辑  收藏  举报