我看到一篇文章说,删除向量项目的最佳方法是使用擦除-删除习惯用法,如下所示
//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
实际上并没有删除任何内容 - 但要删除的元素的内容是不确定的,无论如何都不应该被访问。