C++ Matrices multidimensionales
Matrices multidimensionales
Una matriz multidimensional es una matriz de matrices.
Para declarar una matriz multidimensional, defina el tipo de variable, especifique el nombre de la matriz seguido de corchetes que especifican cuántos elementos tiene la matriz principal, seguido de otro conjunto de corchetes que indica cuántos elementos tienen las submatrices:
string letters[2][4];
Al igual que con las matrices normales, puede insertar valores con un literal de matriz: una lista separada por comas entre llaves. En una matriz multidimensional, cada elemento de un literal de matriz es otro literal de matriz.
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
Cada conjunto de corchetes en una declaración de matriz agrega otra dimensión a una matriz. Se dice que una matriz como la anterior tiene dos dimensiones.
Las matrices pueden tener cualquier número de dimensiones. Cuantas más dimensiones tenga una matriz, más complejo se vuelve el código. La siguiente matriz tiene tres dimensiones:
string letters[2][2][2] = {
{
{ "A", "B" },
{ "C", "D" }
},
{
{ "E", "F" },
{ "G", "H" }
}
};
Acceder a los elementos de una matriz multidimensional
Para acceder a un elemento de una matriz multidimensional, especifique un número de índice en cada una de las dimensiones de la matriz.
Esta declaración accede al valor del elemento en la primera fila (0) y la tercera columna (2) de la matriz letras.
Ejemplo
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
cout << letters[0][2]; // Salidas "C"
Inténtalo tú mismo »
Recuerde que: Los índices de matriz comienzan con 0: [0] es el primer elemento. [1] es el segundo elemento, etc.
Cambiar elementos en una matriz multidimensional
Para cambiar el valor de un elemento, consulte el número de índice del elemento en cada una de las dimensiones:
Ejemplo
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
letters[0][0] = "Z";
cout << letters[0][0]; // Now outputs "Z" instead of "A"
Inténtalo tú mismo »
Recorrer una matriz multidimensional
Para recorrer una matriz multidimensional, necesita un bucle para cada una de las dimensiones de la matriz.
El siguiente ejemplo genera todos los elementos de la matriz letras:
Ejemplo
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E",
"F", "G", "H" }
};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
cout << letters[i][j] << "\n";
}
}
Inténtalo tú mismo »
Este ejemplo muestra cómo recorrer una matriz tridimensional:
Ejemplo
string letters[2][2][2] = {
{
{ "A", "B" },
{ "C", "D" }
},
{
{ "E", "F" },
{ "G", "H" }
}
};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 2; k++) {
cout << letters[i][j][k] << "\n";
}
}
}
Inténtalo tú mismo »
¿Por qué matrices multidimensionales?
Las matrices multidimensionales son excelentes para representar cuadrículas. Este ejemplo muestra un uso práctico para ellos. En el siguiente ejemplo, utilizamos una matriz multidimensional para representar un pequeño juego de Battleship:
Ejemplo
// We put "1" to indicate there is a ship.
bool ships[4][4] = {
{ 0, 1, 1, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 1, 0 },
{ 0, 0, 1, 0 }
};
// Keep track of how many hits the player has and how many turns they have played in these variables
int hits = 0;
int numberOfTurns = 0;
// Allow the player to keep going until they have hit all four ships
while (hits < 4) {
int row, column;
cout << "Selecting coordinates\n";
// Ask the player for a row
cout << "Choose a row number between 0 and 3: ";
cin >> row;
// Ask the player for a column
cout << "Choose a column number between 0 and 3: ";
cin >> column;
// Check if a ship exists in those coordinates
if (ships[row][column]) {
// If the player hit a ship, remove it by setting the value to zero.
ships[row][column] = 0;
// Increase the hit counter
hits++;
// Tell the player that they have hit a ship and how many ships are left
cout << "Hit! " << (4-hits) << " left.\n\n";
} else {
// Tell the player that they missed
cout << "Miss\n\n";
}
// Count how many turns the player has taken
numberOfTurns++;
}
cout << "Victory!\n";
cout << "You won in " << numberOfTurns << " turns";
Ejecutar ejemplo »