Menu
Coddy logo textTech

Elemente entfernen

Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 16 von 56.

Manchmal müssen Sie Elemente aus einem Vektor entfernen, wenn sie nicht mehr benötigt werden. Vektoren erfordern die Verwendung eines Iterators mit der Methode .erase(). Sie können std::find() mit .erase() kombinieren, um Elemente nach Wert zu entfernen.

So entfernen Sie ein Element aus einem 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);  // Entfernt das Element an der Iterator-Position
}

Nach dem Aufruf von erase() wird das Element an dieser Position entfernt und alle nachfolgenden Elemente rücken nach. Wenn Sie versuchen, ein Element zu finden und zu löschen, das nicht existiert, gibt find() den Wert end() zurück, und die Überprüfung darauf verhindert Fehler.

Dieses Muster macht das Entfernen von Elementen sicher und vorhersehbar. Es ist besonders nützlich für die Pflege dynamischer Sammlungen, bei denen Sie bestimmte Elemente basierend auf Benutzereingaben oder Programmlogik entfernen müssen. Denken Sie daran, immer zu prüfen, ob der Iterator gültig ist, bevor Sie den Löschvorgang durchführen.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das das Entfernen von Elementen aus einem std::vector unter Verwendung der Methode .erase() in Kombination mit std::find() demonstriert. Diese Herausforderung testet Ihr Verständnis dafür, wie man bestimmte Elemente sicher aus einem Vektor entfernt und die Ergebnisse beobachtet.

Die folgenden Eingaben werden bereitgestellt:

  • Ein Integer n, der die Anzahl der Elemente darstellt, die anfänglich zum Vektor hinzugefügt werden sollen
  • Anschließend n Integer, die in den Vektor eingefügt werden sollen
  • Ein Integer m, der die Anzahl der zu entfernenden Elemente darstellt
  • Anschließend m Integer, welche die aus dem Vektor zu entfernenden Elemente darstellen

Ihr Programm sollte:

  1. Einen leeren std::vector<int> erstellen
  2. Die Anzahl der hinzuzufügenden Elemente lesen und sie mit .push_back() in den Vektor einfügen
  3. Die anfängliche Vektorgröße nach allen Einfügungen ausgeben
  4. Die Anzahl der zu entfernenden Elemente lesen
  5. Für jedes zu entfernende Element std::find() verwenden, um es zu lokalisieren, und dann .erase() verwenden, um es zu entfernen, falls es gefunden wurde
  6. Nach jedem Entfernungsversuch die aktuelle Größe des Vektors ausgeben
  7. Schließlich die verbleibenden Elemente im Vektor durchlaufen und sie in der richtigen Reihenfolge ausgeben

Verwenden Sie das folgende exakte Ausgabeformat:

Anfängliche Vektorgröße:

Initial size: [size]

Nach jedem Entfernungsversuch:

After removing [number]: size = [current_size]

Final verbleibende Elemente:

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

Denken Sie daran, dass .erase() einen Iterator erfordert, daher müssen Sie zuerst std::find() verwenden, um das Element zu lokalisieren. Überprüfen Sie immer, ob das Element gefunden wurde, bevor Sie es löschen. Verwenden Sie eine bereichsbasierte for-Schleife (range-based for loop), um die verbleibenden Elemente in ihrer aktuellen Reihenfolge auszugeben.

Spickzettel

Verwenden Sie std::find() kombiniert mit .erase(), um ein bestimmtes Element aus einem Vector zu entfernen:

std::vector<int> numbers = {10, 20, 30, 40};
auto it = std::find(numbers.begin(), numbers.end(), 20);
if (it != numbers.end()) {
    numbers.erase(it);  // Entfernt das Element an der Iterator-Position
}

Prüfen Sie immer, ob der Iterator nicht gleich end() ist, bevor Sie löschen, um undefiniertes Verhalten zu vermeiden. Die Methode .erase() erfordert einen Iterator, keinen Wert direkt.

Probier es selbst

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

int main() {
    // Anzahl der hinzuzufügenden Elemente lesen
    int n;
    cin >> n;
    
    // Einen leeren Vektor erstellen
    vector<int> myVector;
    
    // n Elemente lesen und einfügen
    for (int i = 0; i < n; i++) {
        int element;
        cin >> element;
        // Element in den Vektor einfügen
    }
    
    // Anzahl der zu entfernenden Elemente lesen
    int m;
    cin >> m;
    
    // TODO: Schreiben Sie Ihren Code unten
    // 1. Anfängliche Vektorgröße ausgeben
    // 2. Für jedes zu entfernende Element, dieses finden, .erase() verwenden und die Größe nach jeder Entfernung ausgeben
    // 3. Verbleibende Elemente im Vektor ausgeben
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf