Существует алгоритм под названием std :: remove. И вызов стереть на структуру данных. remove перемещает все элементы, которые будут удалены, в конец диапазона итератора и возвращает первый элемент, который будет удален. Возвращает end (), если элемент не может быть найден.
Итак, вы вызываете стирание по диапазону, начиная с возвращаемого значения std :: remove и заканчивая структурой данных.
См .: http://www.sgi.com/tech/stl/remove.html
Обратите внимание, что удаление не будет работать с упорядоченными структурами данных, так как элементы не могут быть переставлены.
remove является линейным, и поэтому будет удалять вектор до конца. Поскольку это не должно было бы пузыриться элементы после элементов, которые будут удалены.
std::vector<int> data
...
data.erase(std::remove(data.begin(), data.end(), 42), data.end())
по сравнению с чем-то вроде этого, которое является O (N ** 2)
std::vector<int> data
...
for ( i = data.begin(), i != data.end(); ++i ) {
if ( *i == 42 ) data.erase( i ) ;
}