Deklarieren ein Array von Vektoren in C++ STL

Jinku Hu 12 Oktober 2023
  1. Verwendung von die Array-Notation im C-Stil zum ein Array von Vektoren in C++ zu deklarieren
  2. Verwenden von std::vector zur Deklaration eines Arrays von Vektoren in C++
Deklarieren ein Array von Vektoren in C++ STL

Dieser Artikel zeigt verschiedene Methoden zum Deklarieren eines Vektorarrays in C++.

Verwendung von die Array-Notation im C-Stil zum ein Array von Vektoren in C++ zu deklarieren

Ein festes Array von Vektoren kann durch die Notation in Array-Klammern im C-Stil deklariert werden - []. Diese Methode definiert im Wesentlichen ein zweidimensionales Array mit einer festen Anzahl von Zeilen und einer variablen Anzahl von Spalten. Die Spalten können mit dem Funktionsaufruf push_back und den Elementen, auf die bei Bedarf über die Notation arr[x][y] zugegriffen wird, hinzugefügt werden. Im folgenden Beispiel werden zehn zufällige ganzzahlige Werte in jede Spalte des Arrays verschoben, was zu einer Matrix von zehn mal zehn führt.

#include <iomanip>
#include <iostream>
#include <vector>

using std::array;
using std::cout;
using std::endl;
using std::setw;
using std::vector;

int main() {
  vector<int> arr_vectors[10];

  for (auto &vec : arr_vectors) {
    for (int i = 0; i < 10; ++i) {
      vec.push_back(rand() % 100);
    }
  }

  for (auto &item : arr_vectors) {
    for (auto &i : item) {
      cout << setw(3) << i << "; ";
    }
    cout << endl;
  }

  return EXIT_SUCCESS;
}

Ausgabe:

83;  86;  77;  15;  93;  35;  86;  92;  49;  21;
62;  27;  90;  59;  63;  26;  40;  26;  72;  36;
11;  68;  67;  29;  82;  30;  62;  23;  67;  35;
29;   2;  22;  58;  69;  67;  93;  56;  11;  42;
29;  73;  21;  19;  84;  37;  98;  24;  15;  70;
13;  26;  91;  80;  56;  73;  62;  70;  96;  81;
 5;  25;  84;  27;  36;   5;  46;  29;  13;  57;
24;  95;  82;  45;  14;  67;  34;  64;  43;  50;
87;   8;  76;  78;  88;  84;   3;  51;  54;  99;
32;  60;  76;  68;  39;  12;  26;  86;  94;  39;

Verwenden von std::vector zur Deklaration eines Arrays von Vektoren in C++

Alternativ kann man den Container std::vector verwenden, um ein variables Array von Vektoren zu deklarieren. Das folgende Codeausschnitt zeigt die Deklaration und Initialisierung der Vier-mal-Vier-Matrix von Ganzzahlen. Beachten Sie, dass das zweite Argument des Konstruktors ein weiterer Vektor-Konstruktor ist, der seine Elemente mit Nullen initialisiert. Auf die Elemente des Objekts kann mit derselben Notation arr[x][y] zugegriffen werden. Auf der positiven Seite können die Zeilen und Spalten mithilfe der integrierten Funktionen des Containers std::vector dynamisch erweitert werden.

#include <iomanip>
#include <iostream>
#include <vector>

using std::array;
using std::cout;
using std::endl;
using std::setw;
using std::vector;

constexpr int LENGTH = 4;
constexpr int WIDTH = 4;

int main() {
  vector<vector<int>> vector_2d(LENGTH, vector<int>(WIDTH, 0));

  vector_2d[2][2] = 12;
  cout << vector_2d[2][2] << endl;

  vector_2d.at(3).at(3) = 99;
  cout << vector_2d[3][3] << endl;

  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

12
99

Die Iteration durch den Vektor von Vektoren kann unter Verwendung der zweistufigen verschachtelten Schleifen auf der Basis des Bereichs erfolgen. Beachten Sie, dass der Aliasname des Zugriffselements das Vektorelement in der inneren for-Schleife ist.

#include <iomanip>
#include <iostream>
#include <vector>

using std::array;
using std::cout;
using std::endl;
using std::setw;
using std::vector;

constexpr int LENGTH = 4;
constexpr int WIDTH = 4;

int main() {
  vector<vector<int>> vector_2d(LENGTH, vector<int>(WIDTH, 0));

  std::srand(std::time(nullptr));
  for (auto &item : vector_2d) {
    for (auto &i : item) {
      i = rand() % 100;
      cout << setw(2) << i << "; ";
    }
    cout << endl;
  }
  cout << endl;

  for (auto &item : vector_2d) {
    for (auto &i : item) {
      i *= 3;
    }
  }

  for (auto &item : vector_2d) {
    for (auto &i : item) {
      cout << setw(3) << i << "; ";
    }
    cout << endl;
  }

  return EXIT_SUCCESS;
}

Ausgabe:

62; 85; 69; 73;
22; 55; 79; 89;
26; 89; 44; 66;
32; 40; 64; 32;

186; 255; 207; 219;
 66; 165; 237; 267;
 78; 267; 132; 198;
 96; 120; 192;  96;
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