HOWTO · C++

Element aus Array entfernen in C++

Dieser Artikel zeigt, wie Sie ein Element aus einem Array in C++ entfernen

Auf dieser Seite

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

Verwenden der Funktionen std::to_array und std::remove zum Entfernen eines Elements aus einem Array in C++

Arrays können in C++ als fest oder dynamisch definiert werden, und beide benötigen unterschiedliche Methoden zum Entfernen von Elementen. In diesem Beispiel betrachten wir die eingebauten festen Arrays im C-Stil, da diese üblicherweise von den numerischen Programmen aus Effizienzgründen manipuliert werden.

Wir werden ein Array von int deklarieren und den Elementwert von 2 entfernen, der in diesem Array zweimal vorkommt. std::remove ist Teil der Algorithmusbibliothek und entfernt alle Instanzen des angegebenen Elements im angegebenen Bereich.

Obwohl wir zunächst das Objekt arr mit der Funktion std::to_array in den Container std::array konvertieren, um es mit der Methode std::remove sicher zu verwenden. Der letztere Algorithmus gibt den Iterator für das neue Ende des Bereichs zurück, was bedeutet, dass das resultierende array-Objekt noch 10-Elemente enthält und wir sie an den neuen Speicherort kopieren müssen. Da das ursprüngliche Objekt ein Array im C-Stil war, weisen wir dem Array mit acht Elementen int neuen dynamischen Speicher zu und kopieren den Inhalt mit der Funktion std::memmove aus dem Objekt array. Beachten Sie jedoch, dass wir den Wert 8 mit der Funktion std::distance berechnet haben.

#include <array>
#include <cstring>
#include <iostream>
#include <iterator>

using std::array;
using std::cout;
using std::endl;
using std::remove;

int main() {
  int arr[10] = {1, 1, 1, 2, 2, 6, 7, 8, 9, 10};
  int elem_to_remove = 2;

  cout << "| ";
  for (const auto &item : arr) {
    cout << item << " | ";
  }
  cout << endl;

  auto tmp = std::to_array(arr);
  auto len =
      std::distance(tmp.begin(), (tmp.begin(), tmp.end(), elem_to_remove));
  auto new_arr = new int[len];
  std::memmove(new_arr, tmp.data(), len * sizeof(int));

  cout << "| ";
  for (int i = 0; i < len; ++i) {
    cout << new_arr[i] << " | ";
  }
  cout << endl;

  delete[] new_arr;

  return EXIT_SUCCESS;
}

Ausgabe:

| 1 | 1 | 1 | 2 | 2 | 6 | 7 | 8 | 9 | 10 |
| 1 | 1 | 1 | 6 | 7 | 8 | 9 | 10 |

Verwenden der Funktionen std::erase und std::remove zum Entfernen von Elementen aus einem Array in C++

Ein anderes Szenario für dieses Problem tritt auf, wenn das angegebene Array vom Typ std::vector ist. Dieses Mal verfügen wir über die Funktionen für dynamische Arrays und es ist flexibler, eine integrierte Funktion für Elementmanipulationen zu verwenden.

Im folgenden Beispielcode verwenden wir das Lösch-Entfernungs-Idiom und entfernen alle Vorkommen des angegebenen Elements im Bereich. Beachten Sie, dass std::erase zwei Iteratoren benötigt, um den Bereich zum Entfernen anzugeben. Daher benötigt es den Rückgabewert des Algorithmus std::remove, um den Startpunkt anzugeben. Wenn wir nur die Methode std::remove aufrufen, hat das Objekt arr2 Elemente wie - {1, 1, 1, 6, 7, 8, 9, 10, 9, 10}.

#include <iostream>
#include <iterator>
#include <vector>

using std::cout;
using std::endl;
using std::remove;
using std::vector;

int main() {
  vector<int> arr2 = {1, 1, 1, 2, 2, 6, 7, 8, 9, 10};
  int elem_to_remove = 2;

  cout << "| ";
  for (const auto &item : arr2) {
    cout << item << " | ";
  }
  cout << endl;

  arr2.erase(std::remove(arr2.begin(), arr2.end(), elem_to_remove), arr2.end());

  cout << "| ";
  for (const auto &item : arr2) {
    cout << item << " | ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

| 1 | 1 | 1 | 2 | 2 | 6 | 7 | 8 | 9 | 10 |
| 1 | 1 | 1 | 6 | 7 | 8 | 9 | 10 |