我正试图删除向量中重复的数字。我用这个做那个:
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 在适当的位置消除唯一的元素,并返回一个指向范围最终结果的指针。例如
std::unique
1 2 2 3 3 3 ^begin ^end
变成
1 2 3 . . . (garbage) ^ resulting end
你在想 std::adjacent_find ,它确实向第一个重复元素返回了迭代器。
std::adjacent_find