Comment déclarer un tableau en 2D en utilisant le nouveau C++
-
Déclarer un tableau 2D pour accéder aux éléments avec la notation
arr[x][y]
-
Déclarer le tableau 2D pour accéder aux éléments avec la notation
arr[]
- Utiliser un conteneur vectoriel pour allouer implicitement un tableau dynamique en 2D
Cet article présente plusieurs méthodes C++ pour déclarer un tableau 2D de manière dynamique en utilisant new
.
Déclarer un tableau 2D pour accéder aux éléments avec la notation arr[x][y]
Cette solution utilise une new
fonction qui permet d’accéder à la structure matricielle générée en utilisant la notation de tableau - [x][y]
. Dans un premier temps, nous déclarons la variable pointeur à pointeur à entier (int **
) et nous attribuons au tableau un pointeur int
de taille de ligne dans le tableau. Ensuite, nous bouclons sur ce tableau de pointeurs et allouons le tableau int
de taille de colonne à chaque itération. Enfin, lorsque nous terminons l’opération de tableau 2D, nous devons libérer la mémoire allouée. Notez que la désallocation se fait dans la boucle en sens inverse.
#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;
}
Production:
83; 86; 77; 15; 93; 35;
86; 92; 49; 21; 62; 27;
90; 59; 63; 26; 40; 26;
72; 36; 11; 68; 67; 29;
Déclarer le tableau 2D pour accéder aux éléments avec la notation arr[]
Cette version utilise une allocation de tableau unique, ce qui en fait une méthode plus efficace en termes de vitesse d’exécution du programme. Par conséquent, nous devrions utiliser la notation []
et un peu d’arithmétique pour accéder aux éléments. Cette version est la méthode recommandée lorsque la taille du tableau
augmente et que les calculs sur ses éléments sont assez intensifs. Notez également que la désallocation devient plus facile de cette façon.
#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;
}
Utiliser un conteneur vectoriel pour allouer implicitement un tableau dynamique en 2D
Alternativement, nous pouvons construire un tableau dynamique en 2D en utilisant un conteneur vector
et sans allocation/détachement manuel de la mémoire. Dans cet exemple, nous initialisons un tableau 4x6 vector_2d
avec chaque élément de la valeur - 0
. La meilleure partie de cette méthode est la flexibilité de l’itération avec la boucle basée sur la plage.
#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;
}
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