1

我遇到了一篇文章,指出删除向量项目的最佳方法是使用擦除删除成语,如下所示

//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 一起使用

4

1 回答 1

6

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

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

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

于 2013-09-15T00:05:41.833 回答