Como Declarar Array 2D Usando novo em C++
-
Declarar Array 2D para Elementos de Acesso com
arr[x][y]
Notação -
Declare Array 2D para Elementos de Acesso com
arr[]
Notação -
Utilize o container
vector
para alocar de forma implícita o Dynamic 2D Array
Este artigo introduz múltiplos métodos C++ para declarar dinamicamente uma array 2D utilizando new
.
Declarar Array 2D para Elementos de Acesso com arr[x][y]
Notação
Esta solução utiliza new
palavra-chave para que a estrutura matricial gerada possa ser acessada utilizando notação de array - x
- y
. A princípio, declaramos ponteiro para ponteiro para variável inteira (int **
) e alocamos int
pointer array de tamanho de linha na array. Em seguida, fazemos um laço sobre esta array de ponteiro e alocamos a array int
de tamanho de coluna a cada iteração. Finalmente, quando terminamos a operação da array 2D, precisamos liberar a memória alocada. Observe que a desalocação é feita no loop de ordem inversa.
#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;
Declare Array 2D para Elementos de Acesso com arr[]
Notação
Este método utiliza uma alocação de array única, tornando-o um método mais eficiente em termos de velocidade de execução do programa. Consequentemente, devemos utilizar a notação []
e alguma aritmética para acessar os elementos. Este método é a forma recomendada quando o tamanho da array
aumenta, e os cálculos sobre seus elementos são bastante intensivos. Note também que a desalocação se torna mais fácil desta forma.
#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;
}
Utilize o container vector
para alocar de forma implícita o Dynamic 2D Array
Alternativamente, podemos construir uma array dinâmica 2D utilizando um recipiente vector
e sem alocação/desalocação manual de memória. Neste exemplo, inicializamos uma array 4x6 vector_2d
com cada elemento do valor - 0
. A melhor parte deste método é a flexibilidade da iteração com o loop baseado no intervalo.
#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