我正在尝试删除 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/