32項 本当に削除したい場合は、remove風アルゴリズムのあとにeraseを使おう

本当に削除したい場合は、remove風アルゴリズムのあとにeraseを使おう


removeは除去したい要素を、後ろの除去したくない要素で上書きします。
例えば、次の画像のvector
f:id:skru_y:20140226133736p:plain
次のコードを実行すると

vector<int>::iterator newEnd(remove(v.begin(), v.end(), 99));

次の画像のようになります。
f:id:skru_y:20140226133740p:plain
無駄な要素を削除するには、removeとeraseを組み合わせます。

v.erase(remove(v.begin(), v.end(), 99), v.end());

remove_ifやuniqueを使う時も、完全に削除するにはeraseと組み合わせて使います。

listはeraseを使う必要がありません。
list::removeやlist::remove_if、list::uniqueは実際に要素を削除します。