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.
Aufgabe
EinfachErstellen 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
nInteger, die in den Vektor eingefügt werden sollen - Ein Integer
m, der die Anzahl der zu entfernenden Elemente darstellt - Anschließend
mInteger, welche die aus dem Vektor zu entfernenden Elemente darstellen
Ihr Programm sollte:
- Einen leeren
std::vector<int>erstellen - Die Anzahl der hinzuzufügenden Elemente lesen und sie mit
.push_back()in den Vektor einfügen - Die anfängliche Vektorgröße nach allen Einfügungen ausgeben
- Die Anzahl der zu entfernenden Elemente lesen
- 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 - Nach jedem Entfernungsversuch die aktuelle Größe des Vektors ausgeben
- 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;
}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