HOWTO · C++
Cómo declarar un array 2D usando lo nuevo en C++
Este artículo explica las formas de declarar el array 2D usando el nuevo en C++
En esta página
Este artículo presenta múltiples métodos de C++ para declarar un array 2D dinámicamente usando new.
Declarar un array 2D para acceder a los elementos con la arr[x][y]
Esta solución utiliza una función new para que se pueda acceder a la estructura del array generada utilizando la notación de array - [x][y]. En primer lugar, declaramos puntero a puntero a la variable entera (int **) y asignamos a el array de puntero int el tamaño de la fila en el array. Luego, hacemos un bucle sobre esta array de punteros y asignamos el array int del tamaño de las columnas en cada iteración. Por último, cuando terminemos la operación del array 2D, necesitamos liberar la memoria asignada. Noten, esa distribución se hace en el orden inverso al del bucle.
#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;
}
Resultado:
83; 86; 77; 15; 93; 35;
86; 92; 49; 21; 62; 27;
90; 59; 63; 26; 40; 26;
72; 36; 11; 68; 67; 29;
Declarar el array 2D para acceder a los elementos con arr[] Notación
Esta versión utiliza una asignación de array única, lo que la convierte en un método más eficiente en términos de velocidad de ejecución del programa. En consecuencia, debemos usar la [] notación y algo de aritmética para acceder a los elementos. Esta versión es la forma recomendada cuando el tamaño de la array se hace más grande, y los cálculos sobre sus elementos son bastante intensos. Nótese también que la desasignación se hace más fácil de esta manera.
#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;
}
Usar el contenedor vector para asignar implícitamente un array 2D dinámico
Alternativamente, podemos construir un array dinámica 2D usando un contenedor vector y sin asignación/distribución manual de memoria. En este ejemplo, inicializamos un array de 4x6 vector_2d con cada elemento del valor - 0. La mejor parte de este método es la flexibilidad de la iteración con el bucle basado en el rango.
#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;
}