Удаление элементов
Часть раздела Логика и управление потоком путешествия по C++ на Coddy. Урок 16 из 56.
Иногда нужно удалять элементы из вектора, когда они больше не нужны. Для этого векторы требуют использовать итератор с методом .erase(). Можно объединить std::find() с .erase(), чтобы удалять элементы по значению.
Вот как удалить элемент из вектора. std::find() находится в заголовочном файле <algorithm>, поэтому подключите его вместе с <vector>:
#include <algorithm>
#include <vector>
std::vector<int> numbers = {10, 20, 30, 40};
auto it = std::find(numbers.begin(), numbers.end(), 20);
if (it != numbers.end()) {
numbers.erase(it); // Удаляет элемент, на который указывает итератор
}После вызова erase() элемент в этой позиции удаляется, а все последующие элементы сдвигаются вниз. Если попытаться найти и удалить несуществующий элемент, find() вернёт end(), и проверка этого предотвратит ошибки.
Этот шаблон делает удаление элементов безопасным и предсказуемым. Он особенно полезен при работе с динамическими коллекциями, из которых нужно удалять определённые элементы в зависимости от ввода пользователя или логики программы. Не забывай всегда проверять, действителен ли итератор, прежде чем удалять элемент.
Задание
ЛегкоСоздай программу, которая демонстрирует удаление элементов из std::vector с помощью метода .erase() в сочетании с std::find(). Это задание проверит, понимаешь ли ты, как безопасно удалять определённые элементы из вектора и наблюдать за результатами.
Будут предоставлены следующие входные данные:
- Целое число
n, представляющее количество элементов, которые нужно изначально добавить в вектор - Затем
nцелых чисел для добавления в вектор - Целое число
m, представляющее количество элементов для удаления - Затем
mцелых чисел, представляющих элементы для удаления из вектора
Твоя программа должна:
- Создать пустой
std::vector<int> - Считать количество элементов для добавления и вставить их в вектор с помощью
.push_back() - Вывести исходный размер вектора после добавления всех элементов
- Считать количество элементов для удаления
- Для каждого элемента, который нужно удалить, использовать
std::find(), чтобы найти его, а затем использовать.erase(), чтобы удалить его, если он найден - После каждой попытки удаления вывести текущий размер вектора
- Наконец, перебрать оставшиеся элементы вектора и вывести их по порядку
Используй следующий точный формат вывода:
Исходный размер вектора:
Initial size: [size]После каждой попытки удаления:
After removing [number]: size = [current_size]Оставшиеся элементы:
Remaining elements: [element1] [element2] [element3] ...Помни, что для .erase() требуется итератор, поэтому сначала нужно использовать std::find(), чтобы найти элемент. Всегда проверяй, найден ли элемент, прежде чем удалять его. Используй цикл for с диапазоном, чтобы вывести оставшиеся элементы в их текущем порядке.
Попробуйте сами
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// Считайте количество элементов для добавления
int n;
cin >> n;
// Создайте пустой вектор
vector<int> myVector;
// Считайте и добавьте n элементов
for (int i = 0; i < n; i++) {
int element;
cin >> element;
// Добавьте элемент в вектор
}
// Считайте количество элементов для удаления
int m;
cin >> m;
// TODO: Напишите свой код ниже
// 1. Выведите начальный размер вектора
// 2. Для каждого удаляемого элемента найдите его, удалите с помощью .erase() и выведите размер после каждого удаления
// 3. Выведите оставшиеся элементы вектора
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаровПотренируйтесь самостоятельно: Онлайн-компилятор C++