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

Mis*_*tyD 1 c++ vector stl-algorithm

我发现一篇文章说,删除矢量项的最佳方法是使用擦除 - 删除习语,如下所示

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

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

Ker*_* SB 6

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

remove 通过重新排列序列以使所有要删除的元素都在序列的末尾,它返回指向那些要删除的元素中的第一个的迭代器.

(所以remove实际上并没有删除任何内容 - 但是要删除的元素的内容是不确定的,无论如何都不应该被访问.)

  • 我试着解释这个并删除我的帖子听起来很傻.std :: remove不会删除!它移动/重新排列! (2认同)
  • 是.`std :: remove`不会删除.我希望它有一个更好的名字.我很确定我不是唯一一个. (2认同)