2012-08-13 64 views
1

我正試圖刪除向量中的數字的重複項。我使用它來做到這一點:爲什麼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

回答

3

std::unique消除了原地的獨特元素並返回了指向該範圍結果的指針。例如,

1 2 2 3 3 3 
^begin  ^end 

成爲

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

你在想的std::adjacent_find,這並返回一個迭代到第一個重複的元素。

相關問題