Синтаксис:
#include <algorithm> forward_iterator remove_if( forward_iterator start, forward_iterator end, Predicate p );
Функция remove_if() удаляет элементы диапазона [start,end), для которых предикат p возвращает истину.
Возвращаемое значение функции - итератор на последний элемент урезанного диапазона.
Обратите внимание, что remove_if() на самом деле не удаляют элементы из диапазона [start, end). Если функция вызывается для контейнера, его длина останется той же после выполнения функции (remove_if() просто не может удалять элементы через итераторы), и все элементы все равно останутся в контейнере. Вместо удаления remove_if() располагает неудаленные элементы в начало контейнера, и возвращает итератор, который разделяет диапазон на неудаленные и удаленные элементы. Чтобы действительно удалить элементы из контейнера, вам нужно вызвать метод контейнера erase, который удаляет элементы, начиная с возвращенного итератора. Обычно эти понятия объединены, и называются идиома удаления-стирания (erase-remove idiom):
container.erase(remove_if(container.begin(), container.end(), pred), container.end());
remove_if() аналогична partition() за исключением двух различий: 1) Обратный предикат. 2) Извлекается только первая половина разделения partition (вторая половина остается нетронутой)
remove_if() работает за линейное время.
remove_if() не может использоваться с ассоциированными контейнерами, такими как set<> или map<>.
Смотрите также: remove, remove_copy, remove_copy_if