HOWTO · C++

Wie deklariert man 2D-Array mit neu in C++

In diesem Artikel werden Möglichkeiten zur Deklaration von 2D-Arrays mit new in C++ erklärt

Auf dieser Seite

Dieser Artikel stellt mehrere C++-Methoden vor, um ein 2D-Array dynamisch mit new zu deklarieren.

2D-Array deklarieren, um mit der Notation arr[x][y] auf Elemente zuzugreifen

Diese Lösung verwendet das new Schlüsselwort, so dass auf die generierte Matrixstruktur mit der Arraynotation - [x][y] - zugegriffen werden kann. Zuerst deklarieren wir Zeiger auf Zeiger zur Integer (int **)-Variablen und weisen int Zeiger-Array der Zeilengröße im Array zu. Als nächstes schleifen wir über dieses Zeigerarray und weisen jeder Iteration das int-Array mit der Spaltengröße zu. Zuletzt, wenn wir die 2D-Array-Operation beenden, müssen wir den allokierten Speicher freigeben. Beachten Sie, dass die Freigabe in der Schleife in umgekehrter Reihenfolge erfolgt.

#include <iomanip>
#include <iostream>

using std::cin;
using std::cout;
using std::endl;
using std::setw;

constexpr int ROW = 4;
constexpr int COL = 6;

int main() {
  int **matrix = new int *[ROW];
  for (int i = 0; i < ROW; ++i) {
    matrix[i] = new int[COL];
  }

  for (int i = 0; i < ROW; ++i) {
    for (int j = 0; j < COL; ++j) {
      matrix[i][j] = rand() % 100;
      cout << setw(2) << matrix[i][j] << "; ";
    }
    cout << endl;
  }

  for (int i = 0; i < ROW; ++i) {
    delete matrix[i];
  }
  delete[] matrix;
  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;

2D-Array deklarieren, um mit der Notation arr[] auf Elemente zuzugreifen

Diese Methode verwendet eine einzige Array-Zuweisung, was sie zu einer effizienteren Methode im Hinblick auf die Geschwindigkeit der Programmausführung macht. Folglich sollten wir die [] Notation und etwas Arithmetik verwenden, um auf die Elemente zuzugreifen. Diese Methode wird empfohlen, wenn die Größe des Arrays zunimmt und die Berechnungen der Elemente sehr intensiv sind. Beachten Sie auch, dass die De-Allokation auf diese Weise einfacher wird.

#include <iomanip>
#include <iostream>

using std::cin;
using std::cout;
using std::endl;
using std::setw;

constexpr int ROW = 4;
constexpr int COL = 6;

int main() {
  int *matrix = new int[ROW * COL];

  for (int i = 0; i < ROW; ++i) {
    for (int j = 0; j < COL; ++j) {
      matrix[j * ROW + i] = rand() % 100;
      cout << setw(2) << matrix[j * ROW + i] << "; ";
    }
    cout << endl;
  }
  delete[] matrix;

  return EXIT_SUCCESS;
}

Vektor-Container zur impliziten Zuweisung dynamischer 2D-Arrays verwenden

Alternativ können wir ein dynamisches 2D-Array mit Hilfe eines vector-Containers und ohne manuelle Speicherzuweisung/-deallokation konstruieren. In diesem Beispiel initialisieren wir ein 4x6 vector_2d Array mit jedem Element mit dem Wert - 0. Der beste Teil dieser Methode ist die Flexibilität der Iteration mit der bereichsbasierten Schleife.

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

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

constexpr int ROW = 4;
constexpr int COL = 6;

int main() {
  vector<vector<int> > vector_2d(ROW, vector<int>(COL, 0));

  for (auto &item : vector_2d) {
    for (auto &item1 : item) {
      item1 = rand() % 100;
      cout << setw(2) << item1 << "; ";
    }
    cout << endl;
  }
  return EXIT_SUCCESS;
}