为什么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()); 

应在第一个副本后,不是我的矢量结束?

+3

cplusplus不被认为是一个很好的参考。尝试阅读[cppreference](http://en.cppreference.com/w/cpp/algorithm/unique)。 – ecatmur 2012-08-13 17:32:55

std::unique消除了原地的独特元素并返回了指向该范围结果的指针。例如,

1 2 2 3 3 3 
^begin  ^end 

成为

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

你在想的std::adjacent_find,这并返回一个迭代到第一个重复的元素。