C++ Mehrdimensionale Arrays
Mehrdimensionale Arrays
Ein mehrdimensionales Array ist ein Array von Arrays.
Um ein mehrdimensionales Array zu deklarieren, definieren Sie den Variablentyp, geben Sie den Namen des Arrays an, gefolgt von eckigen Klammern, die angeben, wie viele Elemente das Hauptarray hat, gefolgt von einem weiteren Satz eckiger Klammern, die angeben, wie viele Elemente die Unterarrays haben:
string letters[2][4];
Wie bei gewöhnlichen Arrays können Sie Werte mit einem Array-Literal einfügen – einer durch Kommas getrennten Liste in geschweiften Klammern. In einem mehrdimensionalen Array ist jedes Element in einem Array-Literal ein anderes Array-Literal.
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
Jeder Satz eckiger Klammern in einer Array-Deklaration fügt einem Array eine weitere Dimension hinzu. Ein Array wie das obige soll zwei Dimensionen haben.
Arrays können beliebig viele Dimensionen haben. Je mehr Dimensionen ein Array hat, desto komplexer wird der Code. Das folgende Array hat drei Dimensionen:
string letters[2][2][2] = {
{
{ "A", "B" },
{ "C", "D" }
},
{
{ "E", "F" },
{ "G", "H" }
}
};
Greifen Sie auf die Elemente eines mehrdimensionalen Arrays zu
Um auf ein Element eines mehrdimensionalen Arrays zuzugreifen, geben Sie in jeder Dimension des Arrays eine Indexnummer an.
Diese Anweisung greift auf den Wert des Elements in der ersten Zeile (0) und dritten Spalte (2) des Arrays Buchstaben zu.
Beispiel
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
cout << letters[0][2]; // Ausgänge "C"
Try it Yourself »
Denken Sie daran: Array-Indizes beginnen mit 0: [0] ist das erste Element. [1] ist das zweite Element usw.
Elemente in einem mehrdimensionalen Array ändern
Um den Wert eines Elements zu ändern, beziehen Sie sich auf die Indexnummer des Elements in jeder der Dimensionen:
Beispiel
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"
Try it Yourself »
Schleife durch ein mehrdimensionales Array
Um ein mehrdimensionales Array zu durchlaufen, benötigen Sie eine Schleife für jede Dimension des Arrays.
Das folgende Beispiel gibt alle Elemente im Array Buchstaben aus:
Beispiel
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";
}
}
Try it Yourself »
Dieses Beispiel zeigt, wie ein dreidimensionales Array durchlaufen wird:
Beispiel
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";
}
}
}
Try it Yourself »
Warum mehrdimensionale Arrays?
Mehrdimensionale Arrays eignen sich hervorragend zur Darstellung von Gittern. Dieses Beispiel zeigt einen praktischen Nutzen für sie. Im folgenden Beispiel verwenden wir ein mehrdimensionales Array, um ein kleines Battleship-Spiel darzustellen:
Beispiel
// 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";
Beispiel ausführen »