需要了解std :: remove with vector.erase

时间:2013-09-14 23:59:08

标签: c++ vector stl-algorithm

我遇到一篇文章说明删除矢量项目的最佳方法是使用擦除删除习语,如下所示

//say vec = 1963,1923,1900,1963,1967;
vector.erase(std::remove(vec.begin(),vec.end(),1963),vec.end());

根据我的理解,vec.erase在第一个和最后一个迭代器中包含两个参数。范围包括第一个和最后一个之间的所有元素。我想知道如果要删除的值存在于向量中的不同索引处,std :: remove将如何给出单个迭代器范围。我想知道std :: remove如何与vector.erase一起使用

1 个答案:

答案 0 :(得分:6)

remove没有给出范围。它只给出了一个迭代器。传递给erase的范围从该迭代器开始,到vec.end()结束,这是你的第二个参数。

remove通过重新排列序列来工作,以便所有要删除的元素都在序列的末尾,并返回指向那些要删除的元素中的第一个的迭代器。 / p>

(所以remove实际上并没有删除任何东西 - 但是要删除的元素的内容是不确定的,不管怎样都不应该被访问。)