Menu
Coddy logo textTech

Usuwanie elementów

Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 16 z 56.

Czasami trzeba usuwać elementy z wektora, gdy nie są już potrzebne. W przypadku wektorów do użycia metody .erase() potrzebny jest iterator. Możesz połączyć std::find() z .erase(), aby usuwać elementy według wartości.

Oto jak usunąć element z wektora:

std::vector<int> numbers = {10, 20, 30, 40};
auto it = std::find(numbers.begin(), numbers.end(), 20);
if (it != numbers.end()) {
    numbers.erase(it);  // Usuwa element wskazywany przez iterator
}

Po wywołaniu erase() element na tej pozycji zostaje usunięty, a wszystkie kolejne elementy przesuwają się w dół. Jeśli spróbujesz znaleźć i usunąć element, który nie istnieje, find() zwróci end(), a sprawdzenie tego zapobiega błędom.

Ten wzorzec sprawia, że usuwanie elementów jest bezpieczne i przewidywalne. Jest szczególnie przydatny przy obsłudze dynamicznych kolekcji, z których trzeba usuwać określone elementy na podstawie danych wprowadzonych przez użytkownika lub logiki programu. Pamiętaj, aby przed usunięciem zawsze sprawdzić, czy iterator jest prawidłowy.

challenge icon

Wyzwanie

Łatwy

Utwórz program demonstrujący usuwanie elementów z std::vector za pomocą metody .erase() w połączeniu z std::find(). To wyzwanie sprawdzi Twoje zrozumienie tego, jak bezpiecznie usuwać określone elementy z wektora i obserwować wyniki.

Podane zostaną następujące dane wejściowe:

  • Liczba całkowita n reprezentująca liczbę elementów, które należy początkowo dodać do wektora
  • Następnie n liczb całkowitych do wstawienia do wektora
  • Liczba całkowita m reprezentująca liczbę elementów do usunięcia
  • Następnie m liczb całkowitych reprezentujących elementy do usunięcia z wektora

Program powinien:

  1. Utworzyć pusty std::vector<int>
  2. Odczytać liczbę elementów do dodania i wstawić je do wektora za pomocą .push_back()
  3. Wyświetlić początkowy rozmiar wektora po wszystkich wstawieniach
  4. Odczytać liczbę elementów do usunięcia
  5. Dla każdego elementu do usunięcia użyć std::find(), aby go znaleźć, a następnie użyć .erase(), aby go usunąć, jeśli został znaleziony
  6. Po każdej próbie usunięcia wyświetlić bieżący rozmiar wektora
  7. Na koniec przejść przez pozostałe elementy wektora i wyświetlić je w kolejności

Użyj dokładnie następującego formatu wyjściowego:

Początkowy rozmiar wektora:

Initial size: [size]

Po każdej próbie usunięcia:

After removing [number]: size = [current_size]

Pozostałe elementy:

Remaining elements: [element1] [element2] [element3] ...

Pamiętaj, że .erase() wymaga iteratora, więc najpierw użyj std::find(), aby znaleźć element. Zawsze sprawdzaj, czy element został znaleziony, zanim go usuniesz. Użyj pętli for opartej na zakresie, aby wyświetlić pozostałe elementy w ich bieżącej kolejności.

Spróbuj swoich sił

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    // Wczytaj liczbę elementów do dodania
    int n;
    cin >> n;
    
    // Utwórz pusty wektor
    vector<int> myVector;
    
    // Wczytaj i dodaj n elementów
    for (int i = 0; i < n; i++) {
        int element;
        cin >> element;
        // Dodaj element do wektora
    }
    
    // Wczytaj liczbę elementów do usunięcia
    int m;
    cin >> m;
    
    // TODO: Napisz swój kod poniżej
    // 1. Wypisz początkowy rozmiar wektora
    // 2. Dla każdego elementu do usunięcia znajdź go, użyj .erase() i wypisz rozmiar po każdym usunięciu
    // 3. Wypisz elementy pozostałe w wektorze
    
    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