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



我看到一篇文章说,删除向量项目的最佳方法是使用擦除-删除习惯用法,如下所示

//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 一起工作

remove没有

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

remove的工作原理是重新排列序列,以便所有要删除的元素都位于序列的末尾,并返回指向第一个要删除的元素的迭代器。

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

相关内容

  • 没有找到相关文章

最新更新