Usuwanie elementów
Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 38 z 56.
Czasami trzeba usunąć elementy ze zbioru, gdy nie są już potrzebne. Metoda .erase() pozwala usunąć konkretny element przez podanie jego wartości.
Oto jak usunąć element ze zbioru:
std::set<int> numbers = {10, 20, 30, 40};
numbers.erase(20); // Usuwa element 20Po wywołaniu .erase(20) zbiór będzie zawierał tylko {10, 30, 40}. Jeśli spróbujesz usunąć element, którego nie ma w zbiorze, nic się nie stanie — zbiór pozostanie bez zmian i nie wystąpi żaden błąd.
Dzięki temu możesz bezpiecznie używać .erase(), nawet jeśli nie masz pewności, czy element istnieje. Jest to szczególnie przydatne przy utrzymywaniu porządku w kolekcjach, gdy trzeba usuwać określone elementy na podstawie danych wprowadzonych przez użytkownika lub logiki programu.
Wyzwanie
ŁatwyUtwórz program, który demonstruje usuwanie elementów z std::set za pomocą metody .erase(). To wyzwanie sprawdzi, czy rozumiesz, jak bezpiecznie usuwać konkretne elementy ze zbioru i obserwować wyniki.
Zostaną podane następujące dane wejściowe:
- Liczba całkowita
noznaczająca liczbę elementów, które należy początkowo dodać do zbioru - Następnie
nliczb całkowitych do wstawienia do zbioru - Liczba całkowita
moznaczająca liczbę elementów do usunięcia - Następnie
mliczb całkowitych oznaczających elementy do usunięcia ze zbioru
Twój program powinien:
- Utworzyć pusty
std::set<int> - Odczytać liczbę elementów do dodania i wstawić je do zbioru za pomocą
.insert() - Wypisać początkowy rozmiar zbioru po wszystkich wstawieniach
- Odczytać liczbę elementów do usunięcia
- Dla każdego elementu do usunięcia użyć
.erase(), aby podjąć próbę jego usunięcia - Po każdej próbie usunięcia wypisać aktualny rozmiar zbioru
- Na koniec przejść przez pozostałe elementy zbioru i wypisać je w kolejności rosnącej
Użyj następującego dokładnego formatu wyjściowego:
Początkowy rozmiar zbioru:
Initial size: [size]Po każdej próbie usunięcia:
After removing [number]: size = [current_size]Pozostałe elementy na końcu:
Remaining elements: [element1] [element2] [element3] ...Pamiętaj, że .erase() bezpiecznie obsługuje próby usunięcia elementów, których nie ma w zbiorze — zbiór pozostaje bez zmian i nie występuje żaden błąd. Użyj pętli for opartej na zakresie, aby wypisać pozostałe elementy; zostaną one automatycznie wyświetlone w kolejności rosnącej, ponieważ zbiory przechowują elementy w posortowanej kolejności.
Spróbuj swoich sił
#include <iostream>
#include <set>
using namespace std;
int main() {
// Wczytaj liczbę elementów do dodania
int n;
cin >> n;
// Utwórz pusty zbiór
set<int> mySet;
// Wczytaj i dodaj n elementów
for (int i = 0; i < n; i++) {
int element;
cin >> element;
// Dodaj element do zbioru
}
// Wczytaj liczbę elementów do usunięcia
int m;
cin >> m;
// TODO: Napisz swój kod poniżej
// 1. Wypisz początkowy rozmiar zbioru
// 2. Dla każdego elementu do usunięcia użyj .erase() i wypisz rozmiar po każdym usunięciu
// 3. Wypisz elementy pozostałe w zbiorze
return 0;
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Wskaźniki i pamięć
Czym jest wskaźnik?Operator pobrania adresuOperator dereferencjiWskaźniki zeroweWskaźniki i tabliceDynamiczne zarządzanie pamięcią za pomocą „new”Zwalnianie pamięci za pomocą „delete”Podsumowanie — ćwiczenia ze wskaźnikami2Wektory (tablice dynamiczne)
Wprowadzenie do std::vectorTworzenie wektoraDodawanie elementówDostęp do elementówRozmiar wektoraIterowanie za pomocą pętli forPętla for oparta na zakresieUsuwanie elementówPodsumowanie — operacje na wektorach5Projekt: Narzędzie do zarządzania zapasami
Konfiguracja projektuDodawanie i aktualizowanie produktów3Projekt: narzędzie do listy zadań
Przegląd projektuDodawanie zadania6Zbiory (unikalne elementy)
Wprowadzenie do std::setTworzenie zbioru i dodawanie elementówSprawdzanie obecności elementówUsuwanie elementówIterowanie po zbiorzePodsumowanie — unikalne liczbyPoćwicz samodzielnie: Kompilator C++ online