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

Jinku Hu 12 Oktober 2023
  1. 2D-Array deklarieren, um mit der Notation arr[x][y] auf Elemente zuzugreifen
  2. 2D-Array deklarieren, um mit der Notation arr[] auf Elemente zuzugreifen
  3. Vektor-Container zur impliziten Zuweisung dynamischer 2D-Arrays verwenden
Wie deklariert man 2D-Array mit neu in C++

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;
}
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