Element aus Array entfernen in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden der Funktionen std::to_array und std::remove zum Entfernen eines Elements aus einem Array in C++
  2. Verwenden der Funktionen std::erase und std::remove zum Entfernen von Elementen aus einem Array in C++
Element aus Array entfernen in C++

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 |
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++ Array