为什么vector.erase删除我所有的重复?
问题描述:
我正试图删除向量中的数字的重复项。我使用它来做到这一点:为什么vector.erase删除我所有的重复?
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
,这并返回一个迭代到第一个重复的元素。
cplusplus不被认为是一个很好的参考。尝试阅读[cppreference](http://en.cppreference.com/w/cpp/algorithm/unique)。 – ecatmur 2012-08-13 17:32:55