Una matriz es una estructura que estuvo en los orígenes de la programación. Pero, a pesar de que se presta atención a las matrices en cada curso de lecciones en cualquier lenguaje de programación, mucha información importante relacionada con la lógica de interacción con esta estructura todavía escapa a los principiantes.
El propósito de esta publicación es recopilar información sobre las matrices que alguna vez me faltaron. Publicar para principiantes.
¿Qué es una matriz?
Una matriz es una estructura del mismo tipo de datos ubicados en la memoria en un bloque que no se rompe.
Las matrices multidimensionales se almacenan de la misma manera.
Saber esto nos permite acceder a los elementos de la matriz de manera diferente. Por ejemplo, tenemos una matriz bidimensional de 9 elementos 3x3. Entonces, hay al menos dos formas de mostrarlo correctamente:
Primera opción (la más 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;
}
2da opción (más 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;
}
La fórmula para acceder a un elemento de una matriz bidimensional, donde ancho es el ancho de la matriz, col es la columna que necesitamos y fila es la línea que necesitamos:
Conociendo la segunda opción, no es necesario usarla constantemente, pero aún así vale la pena conocerla. Por ejemplo, puede ser útil cuando necesita deshacerse de asteriscos adicionales de punteros a punteros a punteros.
Y así es como se puede trabajar con una 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.
, , . , , , — , . .
, , .