Вперед
Зміст
Задачі на видалення одного елемента з використанням функцій find_if та erase
Приклад
Використовуючи функції написати таку програму:
- Ввести з клавіатури n - кількість елементів вектору, а також значення змінних a та b.
- За допомогою функції RandVect заповнити вектор.
- За допомогою функції PrintVect вивести вектор на екран.
- За допомогою функції 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;
}
Пояснення роботи програми:
- Введення параметрів: Користувач вводить діапазон [a, b] та кількість елементів n.
- Генерація вектора: Функція
RandVect заповнює вектор випадковими числами.
- Виведення вектора: Функція
PrintVect показує початковий вектор.
- Пошук останнього від'ємного:
- Використовується зворотний ітератор (
rbegin(), rend())
- Алгоритм
find_if з предикатом Neg
- Видалення елемента:
- Конвертація зворотного ітератора у прямий через
base()
- Видалення елемента за допомогою
erase()
- Виведення результату: Показує вектор після видалення або повідомлення про помилку.
Приклад роботи програми:
Введіть мінімальне значення (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.
Завдання
Для всіх варіантів:
- Ввести з клавіатури n - кількість елементів вектору, а також значення змінних a та b.
- За допомогою функції RandVect заповнити вектор.
- За допомогою функції PrintVect вивести вектор на екран.
- За допомогою функції find_if знайдіть ітератор потрібного за умовою елементу вектору.
- Якщо елемент знайдено, то видалить його за допомогою функції erase.
- Виведіть на екран вміст вектору.
Варіанти задач
- Видалити з вектору останнє парне число.
- Видалити з вектору перше число, яке закінчується на цифру 0.
- Видалити з вектору останнє число, яке більше числа 10.
- Видалити з вектору перше число, яке кратне 3 або 5.
- Видалити з вектору останнє додатне непарне число.
- Видалити з вектору перше число, яке кратне своїй останній цифрі.
- Видалити з вектору останнє число, яке кратно числу 3 і закінчується на цифру 2.
- Видалити з вектору останнє число у якого сума цифр парна. Додатково використовувати функцію SumDig.
- Видалити з вектору перше число у якого сума цифр дорівнює Х. Додатково використовувати функцію SumDig.
- Видалити з вектору останнє число, у якого перша цифра парна. Додатково використовувати функцію FirstDig.
- Видалити з вектору останнє число, яке починається на цифру 5. Додатково використовувати функцію FirstDig.
- Видалити з вектору перше число, в запису якого є цифра 5. Додатково використовувати функцію NumDigCofA.
- Видалити з вектору останнє число, яке складається з однакових цифр (включаючи однозначні). Додатково використовувати функції NumDigCofA та NumDig.
- Видалити з вектору перше число, яке починається та закінчується однаковими цифрами (окрім однозначних). Додатково використовувати функції FirstDig.
- Видалити з вектору перше просте число. Додатково використовувати функції IsPrime.
- Видалити з вектору останнє число, у якого цифри розташовані за спаданням (731, 94). Додатково написати функцію з прототипом bool IsDesc(int n), яка визначає, чи розташовані цифри числа n за спаданням?
- Видалити з вектору два числа: перше число Фібоначчі та останнє число Фібоначчі. Додатково використовувати функції IsFib.
Вперед
Зміст