РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
402 of 815 menu

Функция remove_if

Функция remove_if удаляет из диапазона все элементы, для которых предикат возвращает true. Функция принимает два итератора, задающих диапазон, и третий параметр - унарный предикат, который проверяет каждый элемент. Функция возвращает новый конец диапазона. Важно понимать, что функция не меняет размер контейнера, а лишь перемещает «ненужные» элементы в конец и возвращает итератор на первый из них. Для фактического удаления элементов обычно используют метод erase контейнера.

Синтаксис

remove_if(first, last, pred)

Пример

Давайте удалим из вектора все чётные числа. Для этого передадим в предикат лямбда-функцию, которая проверяет, делится ли число на 2 без остатка:

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> v = {1, 2, 3, 4, 5}; auto new_end = remove_if(v.begin(), v.end(), [](int x) { return x % 2 == 0; }); v.erase(new_end, v.end()); for (int x : v) { cout << x << " "; } return 0; }

Результат выполнения кода:

1 3 5

Пример

Давайте посмотрим, что произойдёт, если не вызывать метод erase. Функция remove_if лишь возвращает итератор на новый логический конец, но физический размер вектора остаётся прежним:

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> v = {1, 2, 3, 4, 5}; auto new_end = remove_if(v.begin(), v.end(), [](int x) { return x > 3; }); cout << "Size: " << v.size() << endl; for (int x : v) { cout << x << " "; } return 0; }

Результат выполнения кода:

"Size: 5" 1 2 3 4 5

Пример

Давайте удалим из вектора строк все строки, длина которых меньше 2:

#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; int main() { vector<string> v = {"a", "ab", "abc", "d", "de"}; auto new_end = remove_if(v.begin(), v.end(), [](const string& s) { return s.length() < 2; }); v.erase(new_end, v.end()); for (const string& s : v) { cout << s << " "; } return 0; }

Результат выполнения кода:

"ab" "abc" "de"

Смотрите также

  • функция remove,
    которая удаляет элементы по значению
  • функция copy_if,
    которая копирует элементы по условию
  • функция replace_if,
    которая заменяет элементы по условию
  • функция unique,
    которая удаляет соседние дубликаты
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить