1. ホーム
  2. c++

[解決済み】C++ ベクトル要素を位置ではなく値で消去する?重複

2022-04-17 23:30:42

質問

vector<int> myVector;

で、ベクトルの中の値がこれ(この順番)だとします。

5 9 2 8 0 7

もし、"8"の値を含む要素を消したいと思ったら、こうすると思います。

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

なぜなら、それだと4番目の要素が消えてしまうからです。しかし、値 "8" に基づいて要素を消去する方法はあるのでしょうか? みたいなね。

myVector.eraseElementWhoseValueIs(8);

それとも、単純にすべてのベクター要素を繰り返し、その値をテストすればいいのでしょうか?

どのように解決するのですか?

どうですか? std::remove() の代わりに

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

この組み合わせは、別名 イレーズ・リムーブ・イディオム .