C++ Багатовимірні масиви
Багатовимірні масиви
Багатовимірний масив – це масив масивів.
Щоб оголосити багатовимірний масив, визначте тип змінної, вкажіть ім’я масиву, а потім квадратні дужки, які вказують, скільки елементів містить основний масив, а потім інші квадратні дужки, які вказують, скільки елементів мають підмасиви:
string letters[2][4];
Як і у звичайних масивах, ви можете вставляти значення за допомогою літералу масиву – списку, розділеного комами, у фігурних дужках. У багатовимірному масиві кожен елемент літералу масиву є іншим літералом масиву.
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
Кожен набір квадратних дужок в декларації масиву додає ще один вимір до масиву. Кажуть, що такий масив, як наведений вище, має два виміри.
Масиви можуть мати будь-яку кількість розмірів. Чим більше розмірів має масив, тим складнішим стає код. Наступний масив має три виміри:
string letters[2][2][2] = {
{
{ "A", "B" },
{ "C", "D" }
},
{
{ "E", "F" },
{ "G", "H" }
}
};
Доступ до елементів багатовимірного масиву
Щоб отримати доступ до елемента багатовимірного масиву, укажіть номер індексу в кожному вимірі масиву.
Ця інструкція отримує доступ до значення елемента в першому рядку (0) і третьому стовпці (2) масиву letters (літери).
Приклад
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
cout << letters[0][2]; // Виведе "C"
Спробуйте самі »
Пам’ятайте, що: індекси масиву починаються з 0: [0] є першим елементом. [1] — другий елемент і т.д.
Зміна елементів у багатовимірному масиві
Щоб змінити значення елемента, зверніться до номера індексу елемента в кожному з вимірів:
Приклад
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
letters[0][0] = "Z";
cout << letters[0][0]; // Тепер виведе "Z" замість "A"
Спробуйте самі »
Циклювання багатовимірного масиву
Щоб виконати цикл багатовимірного масиву, вам потрібен один цикл для кожного виміру масиву.
У наступному прикладі виводяться всі елементи в масиві letters:
Приклад
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";
}
}
Спробуйте самі »
У цьому прикладі показано, як циклювати тривимірний масив:
Приклад
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";
}
}
}
Спробуйте самі »
Чому саме багатовимірні масиви?
Багатовимірні масиви чудово відображають сітки. Цей приклад показує їх практичне використання. У наступному прикладі ми використовуємо багатовимірний масив для представлення невеличкої гри Battleship:
Приклад
// Ми ставимо "1" щоб вказати, що є корабель
bool ships[4][4] = {
{ 0, 1, 1, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 1, 0 },
{ 0, 0, 1, 0 }
};
// Слідкуйте за тим, скільки ударив гравець і скільки ходів він зіграв у цих змінних
int hits = 0;
int numberOfTurns = 0;
// Дозвольте гравцеві продовжувати рух, поки він не потрапить на всі чотири кораблі
while (hits < 4) {
int row, column;
cout << "Selecting coordinates\n";
// Попросіть у гравця рядок
cout << "Виберіть номер рядка від 0 до 3: ";
cin >> row;
// Попросіть у гравця стовпець
cout << "Виберіть номер стовпця від 0 до 3: ";
cin >> column;
// Перевірте, чи існує корабель у цих координатах
if (ships[row][column]) {
// Якщо гравець потрапив у корабель, видаліть його, встановивши значення на нуль
ships[row][column] = 0;
// Збільшити лічильник ударів
hits++;
// Скажіть гравцеві, що він влучив у корабель і скільки кораблів залишилося
cout << "Hit! " << (4-hits) << " left.\n\n";
} else {
// Скажіть гравцеві, що він пропустив
cout << "Miss\n\n";
}
// Порахуйте, скільки ходів зробив гравець
numberOfTurns++;
}
cout << "Перемога!\n";
cout << "Ви виграли в " << numberOfTurns << " ходів";
Виконати приклад »