1

ベクターのアイテムを削除する最良の方法は、次のような消去削除イディオムを使用することであると述べた記事に出くわしました。

//say vec = 1963,1923,1900,1963,1967;
vector.erase(std::remove(vec.begin(),vec.end(),1963),vec.end());

今私が理解していることは、vec.erase が最初と最後のイテレータの 2 つのパラメータを取るということです。範囲には、first と last の間のすべての要素が含まれます。削除する値がベクトル内の異なるインデックスに存在する場合、 std::remove がその単一のイテレータ範囲を与える方法を知りたかったのです。std::remove が vector.erase でどのように機能するか知りたい

4

1 に答える 1

6

remove範囲を与えません。1 つの反復子を与えるだけです。に渡す範囲eraseは、その反復子から始まりvec.end()、2 番目の引数である で終わります。

remove削除するすべての要素がシーケンスの最後になるようにシーケンスを再配置することで機能し、削除する要素の最初の要素を指すイテレータを返します。

(したがってremove、実際には何も削除されませんが、削除される要素の内容は不確定であり、とにかくアクセスするべきではありません。)

于 2013-09-15T00:05:41.833 に答える