Kopieren Sie ein Vektor-Container-Objekt in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden der Initialisierungslisten-Notation zum Kopieren eines Vektor-Containerobjekts in C++
  2. Verwenden des std::copy-Algorithmus zum Kopieren eines Vektor-Container-Objekts in C++
  3. Verwenden des Zuweisungsoperators copy zum Kopieren eines Vektorcontainerobjekts in C++
  4. Verwenden des Copy-Konstruktors zum Kopieren eines Vektor-Containerobjekts in C++
  5. Verwenden der Memberfunktion assign zum Kopieren eines Vektorcontainerobjekts in C++
Kopieren Sie ein Vektor-Container-Objekt in C++

In diesem Artikel werden verschiedene Methoden zum Kopieren ein std::vector-Containerobjekt in C++ erläutert.

Verwenden der Initialisierungslisten-Notation zum Kopieren eines Vektor-Containerobjekts in C++

Der std::vector ist die Kerndatenstruktur, die in der STL-Container-Bibliothek bereitgestellt wird. Es implementiert Array-Elemente mit dynamischer Größe, die zusammenhängend gespeichert werden. Die Speicherverwaltung erfolgt automatisch, wenn der Benutzer Elemente zum Array hinzufügt oder daraus entfernt. Wir können eine Kopie des Vektorobjekts unter Verwendung der Initialisierungslistennotation erstellen, wenn wir eine neue Variable vom Typ std::vector konstruieren. Beachten Sie, dass wir nur die Iteratoren begin und end des ursprünglichen Vektorobjekts übergeben müssen, das in ein neues Objekt kopiert werden soll. Mit derselben Notation können Sie jeden Untervektor des Objekts extrahieren, indem Sie die entsprechenden Iteratoren als Argumente in den geschweiften Klammern angeben.

#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(std::vector<T> v) {
  for (const auto &item : v) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};

  vector<int> vec1_c = {vec1.begin(), vec1.end()};
  vector<int> vec1_cc = {vec1.begin(), vec1.end() - 4};

  printVector(vec1_c);
  printVector(vec1_cc);

  return EXIT_SUCCESS;
}

Ausgabe:

23; 43; 324; 222; 649; 102; 40; 304;
23; 43; 324; 222;

Verwenden des std::copy-Algorithmus zum Kopieren eines Vektor-Container-Objekts in C++

Eine andere Methode zum Kopieren des std::vector-Objekts besteht darin, die Funktion std::copy aus der STL-Algorithmenbibliothek aufzurufen. Es stellt den generischen Kopiervorgang für bereichsbasierte Objekte bereit. Die Funktion verfügt über mehrere Überladungen, aber die im folgenden Codeausschnitt verwendete Überladung benötigt drei Iteratorargumente. Die ersten beiden geben den ursprünglichen Vektorbereich an, während der dritte Iterator den Anfang des Zielvektorbereichs angibt.

#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(std::vector<T> v) {
  for (const auto &item : v) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};

  vector<int> vec1_c(vec1.size());
  copy(vec1.begin(), vec1.end(), vec1_c.begin());
  printVector(vec1_c);

  return EXIT_SUCCESS;
}

Ausgabe:

23; 43; 324; 222; 649; 102; 40; 304;

Verwenden des Zuweisungsoperators copy zum Kopieren eines Vektorcontainerobjekts in C++

Alternativ können Sie mit dem Kopierzuweisungsoperator den Inhalt des Containerobjekts std::vector kopieren. Diese Notation ist die prägnanteste Lösung für dieses Problem. Wir müssen dem neu deklarierten Vektorobjekt nur die Variable des ursprünglichen Vektors zuweisen.

#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(std::vector<T> v) {
  for (const auto &item : v) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};

  vector<int> vec1_c = vec1;
  printVector(vec1_c);

  return EXIT_SUCCESS;
}

Ausgabe:

23; 43; 324; 222; 649; 102; 40; 304;

Verwenden des Copy-Konstruktors zum Kopieren eines Vektor-Containerobjekts in C++

Andererseits bietet ein Kopierkonstruktor der Klasse std::vector eine ähnliche Methode, um den Vektor in ein neu deklariertes Vektorobjekt zu kopieren. In diesem Fall müssen wir die Variable des ursprünglichen Vektors in Klammern übergeben, wenn die neu erstellte Vektorvariable deklariert wird.

#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(std::vector<T> v) {
  for (const auto &item : v) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};

  vector<int> vec1_c(vec1);
  printVector(vec1_c);

  return EXIT_SUCCESS;
}

Ausgabe:

23; 43; 324; 222; 649; 102; 40; 304;

Verwenden der Memberfunktion assign zum Kopieren eines Vektorcontainerobjekts in C++

Der Container std::vector bietet die Memberfunktion assign, mit der Sie den Inhalt eines Vektorobjekts durch die Elemente eines anderen Vektors ersetzen können. Beachten Sie, dass wir einen leeren Vektor-Container initialisieren und dann die Funktion Zuweisen vom Objekt aufrufen können, um den Inhalt eines anderen Vektors zu kopieren.

#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(std::vector<T> v) {
  for (const auto &item : v) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};

  vector<int> vec1_c;
  vec1_c.assign(vec1.begin(), vec1.end());
  printVector(vec1_c);

  return EXIT_SUCCESS;
}

Ausgabe:

23; 43; 324; 222; 649; 102; 40; 304;
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