Вперед Зміст

Задачі на видалення одного елемента з використанням функцій find_if та erase

Приклад

Використовуючи функції написати таку програму:

#include <iostream>
#include <ctime>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;

// Прототипи функцій
void RandVect(vector<int>& v, int n, int a, int b);
void PrintVect(const vector<int>& v);
bool Neg(int x);

int main() {
    // Ініціалізація генератора випадкових чисел
    srand(time(0));
    
    vector<int> vect;
    int a, b, n;
    
    // Введення параметрів
    cout << "Введіть мінімальне значення (a): ";
    cin >> a;
    cout << "Введіть максимальне значення (b): ";
    cin >> b;
    cout << "Введіть кількість елементів (n): ";
    cin >> n;

    // Заповнення та виведення вектора
    RandVect(vect, n, a, b);
    cout << "Початковий вектор: ";
    PrintVect(vect);

    // Пошук останнього від'ємного елемента
    auto rit = find_if(vect.rbegin(), vect.rend(), Neg);
    
    if (rit != vect.rend()) {
        // Конвертація зворотного ітератора у прямий
        auto it = rit.base();
        vect.erase(--it);
        
        cout << "Вектор після видалення: ";
        PrintVect(vect);
    } else {
        cout << "Error: від'ємні елементи відсутні" << endl;
    }

    return 0;
}

// Функція заповнення вектора випадковими числами
void RandVect(vector<int>& v, int n, int a, int b) {
    v.resize(n);
    for (int i = 0; i < n; ++i) {
        v[i] = a + rand() % (b - a + 1);
    }
}

// Функція виведення вектора
void PrintVect(const vector<int>& v) {
    for (int num : v) {
        cout << num << " ";
    }
    cout << endl;
}

// Предикат для пошуку від'ємних чисел
bool Neg(int x) {
    return x < 0;
}

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

  1. Введення параметрів: Користувач вводить діапазон [a, b] та кількість елементів n.
  2. Генерація вектора: Функція RandVect заповнює вектор випадковими числами.
  3. Виведення вектора: Функція PrintVect показує початковий вектор.
  4. Пошук останнього від'ємного:
    • Використовується зворотний ітератор (rbegin(), rend())
    • Алгоритм find_if з предикатом Neg
  5. Видалення елемента:
    • Конвертація зворотного ітератора у прямий через base()
    • Видалення елемента за допомогою erase()
  6. Виведення результату: Показує вектор після видалення або повідомлення про помилку.

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


Введіть мінімальне значення (a): -5
Введіть максимальне значення (b): 5
Введіть кількість елементів (n): 8
Початковий вектор: 2 -3 4 0 -1 5 -2 1 
Вектор після видалення: 2 -3 4 0 -1 5 1 

Для пошуку останнього від'ємного числа використовуватимемо перегляд вектора за допомогою зворотного ітератора та функції find_if. Знайдений зворотний ітератор перетворимо на прямий (за допомогою функції base) і видалимо елемент із цим ітератором за допомогою функції erase.

Завдання

Для всіх варіантів:

Варіанти задач

  1. Видалити з вектору останнє парне число.
  2. Видалити з вектору перше число, яке закінчується на цифру 0.
  3. Видалити з вектору останнє число, яке більше числа 10.
  4. Видалити з вектору перше число, яке кратне 3 або 5.
  5. Видалити з вектору останнє додатне непарне число.
  6. Видалити з вектору перше число, яке кратне своїй останній цифрі.
  7. Видалити з вектору останнє число, яке кратно числу 3 і закінчується на цифру 2.
  8. Видалити з вектору останнє число у якого сума цифр парна. Додатково використовувати функцію SumDig.
  9. Видалити з вектору перше число у якого сума цифр дорівнює Х. Додатково використовувати функцію SumDig.
  10. Видалити з вектору останнє число, у якого перша цифра парна. Додатково використовувати функцію FirstDig.
  11. Видалити з вектору останнє число, яке починається на цифру 5. Додатково використовувати функцію FirstDig.
  12. Видалити з вектору перше число, в запису якого є цифра 5. Додатково використовувати функцію NumDigCofA.
  13. Видалити з вектору останнє число, яке складається з однакових цифр (включаючи однозначні). Додатково використовувати функції NumDigCofA та NumDig.
  14. Видалити з вектору перше число, яке починається та закінчується однаковими цифрами (окрім однозначних). Додатково використовувати функції FirstDig.
  15. Видалити з вектору перше просте число. Додатково використовувати функції IsPrime.
  16. Видалити з вектору останнє число, у якого цифри розташовані за спаданням (731, 94). Додатково написати функцію з прототипом bool IsDesc(int n), яка визначає, чи розташовані цифри числа n за спаданням?
  17. Видалити з вектору два числа: перше число Фібоначчі та останнє число Фібоначчі. Додатково використовувати функції IsFib.

Вперед Зміст