我正在尝试删除向量中的数字重复项。我用它来做到这一点:
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());
第一次重复后我的矢量不应该结束吗?
答案 0 :(得分:3)
std::unique
就地消除了唯一元素,并返回指向范围结果的指针。例如,
1 2 2 3 3 3
^begin ^end
变为
1 2 3 . . . (garbage)
^ resulting end
您正在考虑std::adjacent_find
,它会将迭代器返回到第一个重复元素。