remove
Синтаксис:
#include <algorithm> forward_iterator remove( forward_iterator start, forward_iterator end, const T& val );
Алгоритм remove удаляет все элементы диапазона [start,end), равные val.
Возвращаемое значение функции - итератор на область за последним элементом новой последовательности, не содержащей элементов, равных val.
Обратите внимание, что общепринятые реализации алгоритма remove на самом деле не удаляют элементы из диапазона [start, end). Если функция вызывается для контейнера, его длина останется той же после выполнения функции (remove просто не может удалять элементы через итераторы), и все элементы все равно останутся в контейнере. Вместо удаления remove располагает "удаленные" элементы в конец контейнера, и возвращает итератор, который разделяет не удаленные и удаленные элементы. Чтобы действительно удалить элементы из контейнера, вам нужно вызвать метод контейнера erase, который удаляет элементы, начиная с возвращенного итератора. Обычно эти понятия объединены, и называются идиома удаления-стирания (erase-remove idiom):
container.erase(remove(container.begin(), container.end(), val), container.end());
Функция remove работает за линейное время.
Смотрите также: remove_copy, remove_copy_if, remove_if, unique, unique_copy