Menu
Coddy logo textTech

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 20

Po 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.

challenge icon

Wyzwanie

Łatwy

Utwó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 n oznaczająca liczbę elementów, które należy początkowo dodać do zbioru
  • Następnie n liczb całkowitych do wstawienia do zbioru
  • Liczba całkowita m oznaczająca liczbę elementów do usunięcia
  • Następnie m liczb całkowitych oznaczających elementy do usunięcia ze zbioru

Twój program powinien:

  1. Utworzyć pusty std::set<int>
  2. Odczytać liczbę elementów do dodania i wstawić je do zbioru za pomocą .insert()
  3. Wypisać początkowy rozmiar zbioru po wszystkich wstawieniach
  4. Odczytać liczbę elementów do usunięcia
  5. Dla każdego elementu do usunięcia użyć .erase(), aby podjąć próbę jego usunięcia
  6. Po każdej próbie usunięcia wypisać aktualny rozmiar zbioru
  7. 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;
}
quiz iconSprawdź się

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

Poćwicz samodzielnie: Kompilator C++ online