c++ - 为什么 vector.erase 会删除我所有的重复项?

标签 c++ vector unique erase

我正在尝试删除 vector 中的重复数字。我用这个来做那个:

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());

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

最佳答案

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

1 2 2 3 3 3
^begin      ^end

成为

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

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

关于c++ - 为什么 vector.erase 会删除我所有的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11938888/

相关文章:

c++ - 列表 vector

Python Pandas : Counting the Frequency of unique values over all Columns

mysql 创建表帮助与唯一

C++ 将 unsigned char append 到 wstring

c++ - 在 FreeRTOS 中使用 LinkedList 保存值失败

c++ - 为什么 C++ vector 交换方法具有常数时间复杂度

c - 查找多边形内侧的算法

c++ - C语言编译堆栈程序时出现错误信息

c++ - 在 C++ - xCode 中, float 是 inf 但整数不是 inf。为什么?

sql - SELECT 有条件优先来源