Menu
CoddyTech

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. Wektory wymagają użycia iteratora z metodą .erase(). Możesz połączyć std::find() z .erase(), aby usuwać elementy według wartości.

Oto, jak usunąć element z wektora. std::find() pochodzi z nagłówka <algorithm>, więc dołącz go razem z <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);  // Usuwa element znajdujący się na pozycji iteratora
}

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 zarządzaniu dynamicznymi kolekcjami, z których trzeba usuwać konkretne elementy na podstawie danych wprowadzonych przez użytkownika lub logiki programu. Pamiętaj, aby zawsze sprawdzać, czy iterator jest prawidłowy, zanim usuniesz element.

challenge icon

Wyzwanie

Łatwy

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

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

  • Liczba całkowita n określają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 określająca liczbę elementów do usunięcia
  • Następnie m liczb całkowitych określających elementy do usunięcia z wektora

Twój 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 następującego dokładnego 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 na końcu:

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

Pamiętaj, że .erase() wymaga iteratora, dlatego najpierw musisz użyć 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 poniżej swój kod
    // 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