1

ベクトル内の数値の重複を削除しようとしています。私はこれを使用してそれを行います:

vec1.erase(   unique(vec1.begin(),vec1.end())   ,vec1.end());

Google で見つけたのですが、問題なく動作します。私の質問は、なぜですか? 私がcplusplusで読んだことによると、消去は最初のパラメーターから最後のパラメーターまで削除します。元:

vec1.erase(vec1.begin(),vec1.begin()+3);  //removes first 3 elements

uniqueは最初の複製へのポインターを返すため、より単純なバージョンでは、私が書いているのは次のとおりです。

vec1.erase(first duplicate, vec1.end());

私のベクトルは最初の複製の後に終了すべきではありませんか?

4

1 に答える 1

3

std::unique一意の要素をインプレースで削除し、結果の範囲の末尾へのポインターを返します。例えば、

1 2 2 3 3 3
^begin      ^end

になる

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

あなたが考えているのはstd::adjacent_find、最初の重複要素にイテレータを返すことです。

于 2012-08-13T17:30:44.257 に答える