Вперед
Зміст
Задачі на видалення декількох елементів з використанням функцій remove_if та erase
Приклад
Використовуючи функції написати таку програму:
- Ввести з клавіатури n - кількість елементів вектору, а також значення змінних a та b.
- За допомогою функції RandVect заповнити вектор.
- За допомогою функції PrintVect вивести вектор на екран.
- Видалити з цього вектора всі від'ємні елементи за допомогою функцій remove_if та erase
- Вивести на екран вміст вектору.
#include <iostream>
#include <cstdlib>
#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 new_end = remove_if(vect.begin(), vect.end(), Neg);
vect.erase(new_end, vect.end());
// Виведення результату
cout << "Вектор після видалення від'ємних: ";
PrintVect(vect);
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 показує згенерований вектор.
- Видалення від'ємних елементів:
remove_if переміщує всі невід'ємні елементи на початок вектора
- Повертає ітератор на новий кінець діапазону
erase видаляє всі елементи від нового кінця до кінця вектора
- Виведення результату: Показує вектор після видалення від'ємних елементів.
Приклад роботи програми:
Введіть мінімальне значення (a): -5
Введіть максимальне значення (b): 5
Введіть кількість елементів (n): 10
Початковий вектор: 3 -2 4 0 -5 2 -1 5 -4 1
Вектор після видалення від'ємних: 3 4 0 2 5 1
Ключові особливості:
- Ефективне видалення елементів за допомогою пари remove_if/erase
- Зручний інтерфейс введення/виведення
- Правильна робота з ітераторами
- Обробка всіх граничних випадків
Завдання
Для всіх варіантів:
- Ввести з клавіатури n - кількість елементів вектору, а також значення змінних a та b.
- За допомогою функції RandVect заповнити вектор.
- За допомогою функції PrintVect вивести вектор на екран.
- Видалити з цього вектора всі елементи за умовою задачи, використовуючи функції remove_if та erase
- Вивести на екран вміст вектору.
Варіанти задач
- Видалити з вектору всі непарні числа.
- Видалити з вектору додатні числа.
- Видалити з вектору всі числа, які кратні С.
- Видалити з вектору всі числа, які меньші числа Х.
- Видалити з вектору всі числа, які кратні 3 або 5.
- Видалити з вектору всі числа, які кратні числу В і закінчуються на цифру С.
- Видалити з вектору всі числа, які кратні своїй останній цифрі.
- Видалити з вектору всі числа, у яких перша цифра парна. Додатково використовувати функцію FirstDig.
- Видалити з вектору всі числа, в запису яких є цифра 5. Додатково використовувати функцію NumDigCofA.
- Видалити з вектору всі максимальні числа. Додатково використовувати функцію IndMax.
- Видалити з вектору всі мінімальні числа. Додатково використовувати функцію IndMin.
- Видалити з вектору всі числа, які починаються на цифру С. Додатково використовувати функцію FirstDig.
- Видалити з вектору всі числа, які починаються та закінчуються однаковими цифрами (окрім однозначних). Додатково використовувати функцію FirstDig.
- Видалити з вектору всі числа, які складаються з однакових цифр (включаючи однозначні). Додатково використовувати функції NumDigCofA та NumDig.
- Видалити з вектору всі числа, у яких цифри розташовані за зростанням (137, 49). Додатково написати функцію з прототипом bool IsAsc(int n), яка визначає, чи розташовані цифри числа n за зростанням?
- Видалити з вектору всі прості числа. Додатково використовувати функцію IsPrime.
- Видалити з вектору всі числа паліндроми. Додатково використовувати функцію IsPal.
Вперед
Зміст