Um array é uma estrutura que está na origem da programação. Mas, apesar de os arrays receberem atenção em todos os cursos de aulas em qualquer linguagem de programação, muitas informações importantes relacionadas à lógica de interação com essa estrutura ainda escapam aos iniciantes.
O objetivo deste post é coletar algumas informações sobre arrays que antes eu não tinha. Postagem para iniciantes.
O que é um Array?
Uma matriz é uma estrutura do mesmo tipo de dados localizada na memória em um bloco ininterrupto.
Matrizes multidimensionais são armazenadas da mesma maneira.
Saber disso nos permite acessar os elementos do array de maneira diferente. Por exemplo, temos uma matriz bidimensional de 9 elementos 3x3. Portanto, há pelo menos duas maneiras de exibi-lo corretamente:
1ª opção (mais fácil):
int arr[3][3] {1, 2, 3, 4, 5, 6, 7, 8, 9};
int y = 3, x = 3;
for (int i = 0; i < y, ++i) {
for (int j = 0; j < x; ++j) {
std::cout << arr[i][j];
}
std::cout << std::endl;
}
2ª opção (mais difícil):
int arr [9] {1,2,3,4,5,6,7,8,9};
int x = 3, y = 3;
for (int i = 0; i < y; ++i) {
for (int j = 0; j < x; ++j) {
std::cout << arr[x * i + j]; // x -
}
std::cout << std::endl;
}
A fórmula para acessar um elemento de uma matriz bidimensional, em que largura é a largura da matriz, col é a coluna de que precisamos e row é a linha de que precisamos:
Conhecendo a segunda opção, não é necessário utilizá-la constantemente, mas vale a pena conhecer. Por exemplo, pode ser útil quando você precisa se livrar de asteriscos extras de ponteiros para ponteiros para ponteiros.
E é assim que você pode trabalhar com uma matriz tridimensional
int arr[8] {1,2,3,4,5,6,7,8};
int x = 2, y = 2, z = 2;
for (int i = 0; i < x; ++i) {
for (int j = 0; j < y; ++j) {
for (int k = 0; k < z; ++z) {
std::cout << arr[x * y * i + y * j + k];
}
std::cout << std::endl;
}
std::cout << std::endl;
}
, .
, height - , width - , depth - ( ), col - , row - :
.
, .
- , .
. , :
1) .
, .
int data[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int newArray[3][4];
int height = 3, width = 4;
for (int i = 0; i < height; ++i) {
for (int j = 0; j < width; ++j) {
newArray[i][j] = data[i][width - j - 1];
}
}
.
int data[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int newArray[3][4];
int height = 3, width = 4;
for (int i = 0; i < height; ++i) {
for (int j = 0; j < width; ++j) {
newArray[i][j] = data[height - i - 1][j];
}
}
2) 90 .
, , .
, c .
int data[3][2] = {1,2,3,4,5,6};
int newArray[2][3];
int height = 3, width = 2; // ()
int newHeight = width, newWidth = height;
//
for (int i = 0; i < newHeight; ++i) {
for (int j = 0; j < newWidth; ++j) {
newArray[i][j] = data[j][i]; // data -
}
}
//
for (int i = 0; i < newHeight; ++i) {
for (int j = 0; j < newWidth/2; ++j) {
int temp = newArray[i][j];
newArray[i][j] = newArray[i][newWidth - j - 1];
newArray[i][newWidth - j - 1] = temp;
}
}
, . , .
: . new.
, IT.
, , . , , , — , . .
, , .