Функція remove_if знаходиться у бібліотеці algorithm. Тому для її використання необхідно підключити
| #include <algorithm> |
|---|
Структура функції
| ітератор = remove_if (ітератор початку, ітератор кінця, ім'я логічної функції); |
Тут ім'я логічної функції: вказується ім’я логічної функції, яка буде перевіряти кожний елемент контейнеру, чи задовольняє він потрібній властивості.
Функція remove_if не видаляє елементи з контейнера, а переміщує ті елементи, які не відповідають заданій умові (предикату), на початок контейнера, інші ігнорує.
Результатом функції є ітератор на новий "кінець" діапазону.
Таким чином, після remove_if контейнер містить всі елементи, що не задовольняють умові на початку, а ті, що задовольняють залишаються в кінці, і їх потрібно видалити окремо функцією erase.
Ця програма виведе на екран числа 1 3 5
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
// Функція, яка визначає чи є число від'ємним
bool Neg(int n) {
return n < 0;
}
int main() {
// Ініціалізація вектора
vector<int> vect = {1, -2, 3, -4, 5, -6};
// Виведення початкового вектора
cout << "Початковий вектор: ";
for (int num : vect) {
cout << num << " ";
}
cout << endl;
// Видалення від'ємних елементів за допомогою remove_if
auto new_end = remove_if(vect.begin(), vect.end(), Neg);
// Виведення результату
cout << "Вектор після видалення від'ємних: ";
for (auto it = vect.begin(); it != new_end; ++it) {
cout << *it << " ";
}
cout << endl;
// Зменшення розміру вектора до фактичного
vect.erase(new_end, vect.end());
// Виведення фінального вектора
cout << "Фінальний вектор: ";
for (int num : vect) {
cout << num << " ";
}
cout << endl;
return 0;
}
remove_if переміщує всі елементи, що не задовольняють умову, на початокerase видаляє "зайві" елементи з кінця вектора.
Початковий вектор: 1 -2 3 -4 5 -6
Вектор після видалення від'ємних: 1 3 5
Фінальний вектор: 1 3 5
remove_if для фільтраціїremove_if