1

我正在尝试删除向量中数字的重复项。我用它来做到这一点:

vec1.erase(   unique(vec1.begin(),vec1.end())   ,vec1.end());

用谷歌找到它,它工作得很好,我的问题是为什么?根据我在 cplusplus 上阅读的内容,erase从第一个参数删除到最后一个参数。前任:

vec1.erase(vec1.begin(),vec1.begin()+3);  //removes first 3 elements

并且unique返回指向第一个副本的指针,所以在更简单的版本中,我正在写的是:

vec1.erase(first duplicate, vec1.end());

我的向量不应该在第一次重复后结束吗?

4

1 回答 1

3

std::unique就地消除唯一元素并返回指向范围结果结尾的指针。例如,

1 2 2 3 3 3
^begin      ^end

变成

1 2 3 . . . (garbage)
      ^ resulting end

您正在考虑std::adjacent_find,它确实将迭代器返回到第一个重复元素。

于 2012-08-13T17:30:44.257 回答