Удаление элементов
Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 38 из 56.
Иногда вам нужно удалять элементы из множества, когда они больше не нужны. Метод .erase() позволяет удалить конкретный элемент, указав его значение.
Вот как удалить элемент из множества:
std::set<int> numbers = {10, 20, 30, 40};
numbers.erase(20); // Удаляет элемент 20После вызова .erase(20), множество будет содержать только {10, 30, 40}. Если вы попытаетесь удалить элемент, которого нет в множестве, ничего не произойдет — множество останется без изменений, и ошибка не возникнет.
Это делает .erase() безопасным для использования, даже если вы не уверены в существовании элемента. Это особенно полезно для поддержания чистоты коллекций, когда вам нужно удалить определенные элементы на основе пользовательского ввода или логики программы.
Задание
ЛегкоСоздайте программу, которая демонстрирует удаление элементов из std::set с использованием метода .erase(). Эта задача проверит ваше понимание того, как безопасно удалять определенные элементы из множества и наблюдать за результатами.
Будут предоставлены следующие входные данные:
- Целое число
n, представляющее количество элементов, которые изначально нужно добавить в множество - Затем
nцелых чисел для вставки в множество - Целое число
m, представляющее количество элементов для удаления - Затем
mцелых чисел, представляющих элементы, которые нужно удалить из множества
Ваша программа должна:
- Создать пустое
std::set<int> - Считать количество элементов для добавления и вставить их в множество с помощью
.insert() - Вывести начальный размер множества после всех вставок
- Считать количество элементов для удаления
- Для каждого элемента, который нужно удалить, использовать
.erase()для попытки удаления - После каждой попытки удаления выводить текущий размер множества
- В конце перебрать оставшиеся элементы в множестве и вывести их в отсортированном порядке
Используйте следующий точный формат вывода:
Начальный размер множества:
Initial size: [size]После каждой попытки удаления:
After removing [number]: size = [current_size]Финальные оставшиеся элементы:
Remaining elements: [element1] [element2] [element3] ...Помните, что .erase() безопасно обрабатывает попытки удаления элементов, которых нет в множестве — множество остается неизменным, и ошибка не возникает. Используйте цикл for на основе диапазона (range-based for loop) для вывода оставшихся элементов, и они автоматически будут отображены в отсортированном порядке, так как множества поддерживают свои элементы в отсортированной последовательности.
Шпаргалка
Используйте .erase(), чтобы удалить определенный элемент из множества, указав его значение:
std::set<int> numbers = {10, 20, 30, 40};
numbers.erase(20); // Удаляет элемент 20Если вы попытаетесь удалить элемент, которого нет в множестве, ничего не произойдет — множество останется неизменным, и ошибка не возникнет, что делает использование .erase() безопасным.
Попробуйте сами
#include <iostream>
#include <set>
using namespace std;
int main() {
// Считать количество элементов для добавления
int n;
cin >> n;
// Создать пустое множество
set<int> mySet;
// Считать и вставить 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Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаров3Проект: Список задач
Обзор проектаДобавление задачи6Множества (уникальные элементы)
Введение в std::setСоздание множества и добавление элементовПроверка наличия элементовУдаление элементовИтерация по множествуПовторение: уникальные числа