C++ ベクトル要素を位置ではなく値で消去しますか? [重複] 質問する

C++ ベクトル要素を位置ではなく値で消去しますか? [重複] 質問する
vector<int> myVector;

そしてベクトルの値が次の通りであるとします(この順序で)。

5 9 2 8 0 7

「8」の値を含む要素を消去したい場合は、次のようにすると思います。

myVector.erase(myVector.begin()+4);

4 番目の要素が消去されるからです。しかし、値「8」に基づいて要素を消去する方法はありますか? たとえば、次のようになります。

myVector.eraseElementWhoseValueIs(8);

それとも、すべてのベクトル要素を反復処理してその値をテストするだけでよいのでしょうか?

ベストアンサー1

いかがでしょうかstd::remove()その代わり:

#include <algorithm>
...
vec.erase(std::remove(vec.begin(), vec.end(), 8), vec.end());

この組み合わせは、消去削除イディオム

おすすめ記事