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

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

发现它与谷歌,它的工作正常,我的问题是为什么?
根据我在cplusplus上阅读的内容,擦除从第一个参数删除到最后一个参数。
例如:
vec1.erase(vec1.begin(),vec1.begin()+3);  //removes first 3 elements

并且唯一返回一个指向第一个重复项的指针,因此在更简单的版本中,我正在编写的是:
vec1.erase(first duplicate, vec1.end());

我的载体在第一次复制后不应该结束吗?

最佳答案

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

1 2 2 3 3 3
^begin      ^end

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

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

10-07 16:21