Wie man Vektor in Array in C++ konvertiert

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Methode data(), um einen Vektor in ein Array zu konvertieren
  2. Verwenden Sie die & Adresse des Operators, um einen Vektor in ein Array zu konvertieren
  3. Verwenden Sie die Funktion copy(), um einen Vektor in ein Array zu konvertieren
Wie man Vektor in Array in C++ konvertiert

Dieser Artikel führt ein, wie man einen Vektor in ein Array in C++ konvertiert.

Verwenden Sie die Methode data(), um einen Vektor in ein Array zu konvertieren

Da der C++-Standard garantiert, dass vector-Containerelemente zusammenhängend im Speicher abgelegt werden, können wir die Daten, eine eingebaute Vektor-Methode, aufrufen und die zurückgegebene Adresse dem neu deklarierten double zuweisen, wie im folgenden Code-Beispiel gezeigt wird.

Beachten Sie, daß jede Modifikation der Elemente unter Verwendung des d_arr-Zeigers die Datenelemente des ursprünglichen Vektors verändert, da wir lediglich auf die arr-Elemente zeigen, sie aber nicht an eine neue Stelle kopieren.

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

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

int main() {
  vector<double> arr{-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

  copy(arr.begin(), arr.end(), std::ostream_iterator<double>(cout, "; "));
  cout << endl;

  double *d_arr = arr.data();
  for (size_t i = 0; i < arr.size(); ++i) {
    cout << d_arr[i] << "; ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

-3.5; -21.1; -1.99; 0.129; 2.5; 3.111;
-3.5; -21.1; -1.99; 0.129; 2.5; 3.111;

Verwenden Sie die & Adresse des Operators, um einen Vektor in ein Array zu konvertieren

Alternativ können wir den Ampersand-Operator verwenden, der die Adresse des Objekts im Speicher nimmt und sie einem neu deklarierten Zeiger auf ein double zuweist.

In diesem Beispiel nehmen wir die Adresse des ersten Elements in vector, aber Sie können einen Zeiger auf jedes andere Element extrahieren und Operationen nach Bedarf durchführen.

Auf Elemente kann mit der Array-Notation d_arr[index] zugegriffen werden, und ähnlich wie bei der vorherigen Methode wirken sich alle Änderungen an d_arr auf arr-Daten aus.

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

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

int main() {
  vector<double> arr{-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

  copy(arr.begin(), arr.end(), std::ostream_iterator<double>(cout, "; "));
  cout << endl;

  double *d_arr = &arr[0];
  for (size_t i = 0; i < arr.size(); ++i) {
    cout << d_arr[i] << "; ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Verwenden Sie die Funktion copy(), um einen Vektor in ein Array zu konvertieren

Die Methode copy() kann verwendet werden, um einen Vektor in ein doppeltes Array zu konvertieren, so dass Datenelemente an eine andere Speicherstelle kopiert werden. Später können wir sie modifizieren, ohne uns Gedanken über die Veränderung der ursprünglichen vector-Daten machen zu müssen.

Beachten Sie, dass wir ein d_arr mit festen 6 Elementen deklarieren, das als Stapelspeicher alloziert wird. In den meisten Szenarien ist die Größe eines Arrays nicht im Voraus bekannt, so dass Sie die dynamische Speicherzuweisung mit Methoden wie new oder malloc verwenden müssten.

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

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

int main() {
  vector<double> arr{-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

  copy(arr.begin(), arr.end(), std::ostream_iterator<double>(cout, "; "));
  cout << endl;

  double d_arr[6];
  copy(arr.begin(), arr.end(), d_arr);
  for (size_t i = 0; i < arr.size(); ++i) {
    cout << d_arr[i] << "; ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

new_vec - | 97 | 98 | 99 | 100 | 101 |
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