Стандартная метод удаления + стирания удаляет элементы по значению:
#include <vector>
#include <algorithm>
std::vector<int> v;
v.erase(std::remove(v.begin(), v.end(), 12), v.end());
remove
переупорядочивает элементы так, чтобы все стирания были в конце, и возвращает итераторначало диапазона стирания, и erase
фактически удаляет элементы из контейнера.
Это так же эффективно, как вы можете получить с контейнером непрерывного хранения, таким как vector
, особенно если у вас есть несколько элементовто же значение, которое стирается за одну стирку.