Вперед Зміст

Використання функції remove_if

Функція 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;
}

Пояснення роботи програми:

  1. Функція Neg: Визначає, чи є число від'ємним (повертає true, якщо так).
  2. Ініціалізація: Вектор ініціалізується тестовими значеннями {1, -2, 3, -4, 5, -6}.
  3. Виведення початкового вектора: Показує вміст вектора до змін.
  4. Видалення елементів:
    • remove_if переміщує всі елементи, що не задовольняють умову, на початок
    • Повертає ітератор на новий кінець діапазону
  5. Остаточне очищення: erase видаляє "зайві" елементи з кінця вектора.

Приклад роботи програми:


Початковий вектор: 1 -2 3 -4 5 -6 
Вектор після видалення від'ємних: 1 3 5 
Фінальний вектор: 1 3 5 

Ключові особливості:

Вперед Зміст