Elemente entfernen
Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy. Lektion 16 von 56.
Manchmal musst du Elemente aus einem Vektor entfernen, wenn sie nicht mehr benötigt werden. Bei Vektoren musst du die Methode .erase() mit einem Iterator verwenden. Du kannst std::find() mit .erase() kombinieren, um Elemente anhand ihres Werts zu entfernen.
So entfernst du ein Element aus einem Vektor. std::find() stammt aus dem Header <algorithm>, also binde ihn zusammen mit <vector> ein:
#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); // Entfernt das Element an der Position des Iterators
}Nach dem Aufruf von erase() wird das Element an dieser Position entfernt und alle nachfolgenden Elemente rücken nach. Wenn du versuchst, ein Element zu finden und zu löschen, das nicht existiert, gibt find() end() zurück. Eine entsprechende Prüfung verhindert Fehler.
Dieses Muster macht das Entfernen von Elementen sicher und vorhersehbar. Es ist besonders nützlich, um dynamische Sammlungen zu verwalten, in denen bestimmte Elemente anhand von Benutzereingaben oder der Programmlogik entfernt werden müssen. Denk daran, immer zu prüfen, ob der Iterator gültig ist, bevor du Elemente löschst.
Aufgabe
EinfachErstelle ein Programm, das das Entfernen von Elementen aus einem std::vector mithilfe der Methode .erase() in Kombination mit std::find() demonstriert. Diese Herausforderung testet dein Verständnis dafür, wie bestimmte Elemente sicher aus einem Vektor entfernt werden und wie du die Ergebnisse beobachtest.
Folgende Eingaben werden bereitgestellt:
- Eine Ganzzahl
n, die die Anzahl der Elemente angibt, die zunächst zum Vektor hinzugefügt werden sollen - Dann
nGanzzahlen, die in den Vektor eingefügt werden sollen - Eine Ganzzahl
m, die die Anzahl der zu entfernenden Elemente angibt - Dann
mGanzzahlen, die die aus dem Vektor zu entfernenden Elemente angeben
Dein Programm sollte:
- Einen leeren
std::vector<int>erstellen - Die Anzahl der hinzuzufügenden Elemente einlesen und sie mithilfe von
.push_back()in den Vektor einfügen - Nach allen Einfügungen die anfängliche Größe des Vektors ausgeben
- Die Anzahl der zu entfernenden Elemente einlesen
- Für jedes zu entfernende Element mit
std::find()danach suchen und es dann mit.erase()entfernen, falls es gefunden wurde - Nach jedem Entfernungsversuch die aktuelle Größe des Vektors ausgeben
- Schließlich die verbleibenden Elemente im Vektor durchlaufen und der Reihe nach ausgeben
Verwende das folgende exakte Ausgabeformat:
Anfängliche Vektorgröße:
Initial size: [size]Nach jedem Entfernungsversuch:
After removing [number]: size = [current_size]Verbleibende Elemente am Ende:
Remaining elements: [element1] [element2] [element3] ...Beachte, dass .erase() einen Iterator erfordert. Daher musst du zuerst mit std::find() nach dem Element suchen. Prüfe immer, ob das Element gefunden wurde, bevor du es entfernst. Verwende eine bereichsbasierte for-Schleife, um die verbleibenden Elemente in ihrer aktuellen Reihenfolge auszugeben.
Probier es selbst
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// Lies die Anzahl der hinzuzufügenden Elemente ein
int n;
cin >> n;
// Erstelle einen leeren Vektor
vector<int> myVector;
// Lies n Elemente ein und füge sie hinzu
for (int i = 0; i < n; i++) {
int element;
cin >> element;
// Füge das Element in den Vektor ein
}
// Lies die Anzahl der zu entfernenden Elemente ein
int m;
cin >> m;
// TODO: Schreibe deinen Code unten
// 1. Gib die anfängliche Größe des Vektors aus
// 2. Suche jedes zu entfernende Element, entferne es mit .erase() und gib nach jedem Entfernen die Größe aus
// 3. Gib die verbleibenden Elemente im Vektor aus
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Pointer und Speicher
Was ist ein Pointer?AdressoperatorDereferenzierungsoperatorNull-PointerPointer und ArraysDynamischer Speicher mit 'new'Speicher freigeben mit 'delete'Zusammenfassung – Pointer-Übung2Vektoren (Dynamische Arrays)
Einführung in std::vectorEinen Vector erstellenElemente hinzufügenAuf Elemente zugreifenVector-GrößeIterieren mit einer For-SchleifeRange-based For-SchleifeElemente entfernenZusammenfassung – Vector-Operationen3Projekt: Aufgabenlisten-Tool
ProjektübersichtEine Aufgabe hinzufügenÜbe selbstständig: Online-C++-Compiler