Wie entferne ich ein Element aus einem Vektor in C++

Jinku Hu 12 Oktober 2023
  1. Verwendung von die erase() Methode zum Entfernen eines Elements aus einem Vektor in C++
  2. Verwenden Sie die Methode std::erase(), um ein Element aus einem Vektor in C++ zu entfernen
  3. Verwenden Sie std::erase() und std::remove(), um ein Element aus einem Vektor in C++ zu entfernen
Wie entferne ich ein Element aus einem Vektor in C++

In diesem Artikel werden mehrere Methoden zum Entfernen eines Elements aus einem Vektor in C++ erläutert.

Verwendung von die erase() Methode zum Entfernen eines Elements aus einem Vektor in C++

Das erase()-Verfahren ist eine Member-Funktion der Klasse std::vector und kann ein einzelnes Element des Vektors oder des Bereichs, der als [first, last] angegeben ist, verwenden. Die Funktion gibt einen Iterator zurück, der auf das letzte entfernte Element folgt. Wenn ein einzelnes Element entfernt wird, wie im folgenden Code-Beispiel gezeigt, muss der übergebene Iterator dereferenzierbar sein.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

void PrintVec(vector<string> &vec) {
  for (const auto &item : vec) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<string> str_vec = {"array", "vector", "deque", "list",     "set",
                            "map",   "stack",  "queue", "multimap", "span"};
  PrintVec(str_vec);

  // DELETE element "set"
  auto elem_to_remove = str_vec.begin() + 4;
  if (elem_to_remove != str_vec.end()) {
    str_vec.erase(elem_to_remove);
  }

  PrintVec(str_vec);
  return EXIT_SUCCESS;
}

Ausgabe:

array; vector; deque; list; set; map; stack; queue; multimap; span;
array; vector; deque; list; map; stack; queue; multimap; span;

Verwenden Sie die Methode std::erase(), um ein Element aus einem Vektor in C++ zu entfernen

Diese std::erase() ist eine Nichtmitglied-Funktion, die den Bereich und den Wert nimmt, der mit jedem Element verglichen wird, um es jedes Mal zu löschen, wenn eine Übereinstimmung vorliegt. Diese Methode könnte einen Nachteil haben, wenn ein einzelnes Element entfernt werden muss, aber Sie können dieses Verhalten vermeiden, indem Sie das zweite Argument durch eine Array-Variable - arr[index] - übergeben. Wie im nächsten Beispiel gezeigt wird, entfernt erase nur das Element array.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::erase;
using std::string;
using std::vector;

void PrintVec(vector<string> &vec) {
  for (const auto &item : vec) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<string> str_vec = {"array", "vector", "deque", "list",     "set",
                            "map",   "stack",  "queue", "multimap", "span"};

  PrintVec(str_vec);

  // DELETE elemen "array"
  erase(str_vec, str_vec[0]);

  PrintVec(str_vec);
  return EXIT_SUCCESS;
}

Ausgabe:

array; vector; deque; list; set; map; stack; queue; multimap; span;
vector; deque; list; set; map; stack; queue; multimap; span;

Verwenden Sie std::erase() und std::remove(), um ein Element aus einem Vektor in C++ zu entfernen

Diese Methode wird als Erase-remove-Idiom bezeichnet und entfernt jedes Element, das gleich einem bestimmten Wert ist oder ein Kriterium erfüllt, aus einem bestimmten Bereich. Beachten Sie, dass diese Lösung einige außergewöhnliche Eigenschaften hat, wie - sie kann nicht mit Containern verwendet werden, die const_iterator zurückgeben.

#include <algorithm>
#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::erase;
using std::string;
using std::vector;

void PrintVec(vector<string> &vec) {
  for (const auto &item : vec) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<string> str_vec = {"map", "vector", "deque", "list", "set",
                            "map", "stack",  "queue", "map",  "span"};

  PrintVec(str_vec);

  // DELETES all elements with value "map"
  str_vec.erase(std::remove(str_vec.begin(), str_vec.end(), "map"),
                str_vec.end());

  PrintVec(str_vec);
  return EXIT_SUCCESS;
}

Ausgabe:

map; vector; deque; list; set; map; stack; queue; map; span;
vector; deque; list; set; stack; queue; span;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ Vector