Dichiara array 2D utilizzando new in C++
-
Dichiara array 2D per accedere agli elementi con la notazione
arr[x][y]
-
Dichiara array 2D per accedere agli elementi con la notazione
arr[]
-
Usa il contenitore
vector
per allocare implicitamente un array dinamico 2D
Questo articolo introduce più metodi C++ per dichiarare dinamicamente un array 2D utilizzando new
.
Dichiara array 2D per accedere agli elementi con la notazione arr[x][y]
Questa soluzione utilizza la parola chiave new
in modo che sia possibile accedere alla struttura di un array generata utilizzando la notazione dell’array - [x][y]
. All’inizio, dichiariamo il puntatore al puntatore alla variabile intera (int **
) e allochiamo l’array di puntatori int
della dimensione della riga nell’array. Successivamente, eseguiamo un bucle su questo array di puntatori e assegniamo l’array int
della dimensione della colonna a ogni iterazione. Infine, quando finiamo l’operazione con l’array 2D, dobbiamo liberare la memoria allocata. Si noti che la deallocazione viene eseguita nel bucle di ordine inverso.
#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;
}
Produzione:
83; 86; 77; 15; 93; 35;
86; 92; 49; 21; 62; 27;
90; 59; 63; 26; 40; 26;
72; 36; 11; 68; 67; 29;
Dichiara array 2D per accedere agli elementi con la notazione arr[]
Questo metodo utilizza una singola allocazione di array, rendendolo un metodo più efficiente in termini di velocità di esecuzione del programma. Di conseguenza, dovremmo usare la notazione []
e un po’ di aritmetica per accedere agli elementi. Questo metodo è il modo consigliato quando la dimensione dell’array diventa più grande e i calcoli sui suoi elementi sono piuttosto intensi. Nota anche che la deallocazione diventa più facile in questo modo.
#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;
}
Usa il contenitore vector
per allocare implicitamente un array dinamico 2D
In alternativa, possiamo costruire un array 2D dinamico utilizzando un contenitore vector
e senza allocazione / deallocazione manuale della memoria. In questo esempio, inizializziamo un array 4x6 vector_2d
con ogni elemento del valore - 0
. La parte migliore di questo metodo è la flessibilità dell’iterazione con il bucle basato su intervallo.
#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