
Об’єктно-орієнтована технологія програмування
Тема12: Багатовимірні масиви План:
-
Основні визначення
-
Форми ініціалізації масиву
-
Матриці
-
Введення-виведення матриць
-
Перебір елементів матриці
За визначенням, багатовимірні масиви як такі в С++ не існують, масив завжди вважається одновимірним. Проте в С++ дозволено оголошувати одновимірні масиви масивів (тобто багатовимірні масиви). Вони задаються вказівкою розміру кожній розмірності в квадратних дужках.
Наприклад, опис двовимірного масиву з 6 рядків по 8 стовпців: int matr [6][8]; інтерпретується як одновимірний масив з ім'ям matr з 6 елементів типа int[8].
Тривимірний масив double prim [6][4][2]; інтерпретується як одновимірний масив з ім'ям prim, що включає 6 елементів, кожен з яких має типа double [4][2]. У свою чергу, кожен з цих елементів є одновимірний масив з чотирьох елементів типа double [2]. І, нарешті, кожен з цих елементів є масивом з двох елементів типа double.
Для доступу до елементу багатовимірного масиву вказуються всі його індекси, наприклад: matr[i][j], prim [i][j][k];.
Форми ініціалізації масиву:
При структурній ініціалізації багатовимірний масив представляється як масив масивів, при цьому кожен масив полягає в свої фігурні дужки. При безструктурній ініціалізації задається загальний список елементів в тому порядку, в якому елементи розташовуються в пам'яті.
Багатовимірні масиви можуть ініціалізуватися і без вказівки розміру найлівішій розмірності. Компілятор в цьому випадку визначає число елементів по числу членів в списку ініціалізації.
Приклади:
структурна ініціалізація:
int mass [][2] = { {1,1}, {0, 2}, {1, 0} };
int array [2][3] = {{1, 2, 3}, {2, 3, 4}};
int а [2][3] [4]= {{{1}, {2, 3}, {4, 5, 6}}, {{1, 2}, {2, 3, 4}, {4, 5, 6, 7}}};
//результат ініціалізації: 1000 2300 4560 1200 2340 4567
безструктурна ініціалізація:
int mass [3][2] = {1, 1, 0, 2, 1, 0};
int а [2][3] [4]= {1, 0, 0, 0, 2, 3, 0, 0, 4, 5, 6, 0, 1, 0, 0, 0, 2, 3, 0, 0, 4, 5, 6, 0};
int m[] [3] = { 00, 01, 02, 10, 11, 12, 20, 21, 22}
У пам'яті багатовимірний масив розташовується в послідовних комірках по рядкам (шарах). Елементи з меншими значеннями індексу зберігаються в нижчих адресах пам'яті. Багатовимірні масиви розташовуються таким чином, що найправіший
індекс зростає найпершим. Наприклад, якщо є масив int array [10][3], то в пам'яті за збільшенням адрес будуть розміщені елементи:
array [0][0], array [0][1], array [0][2], array [1][0], array [1][1], array [1][2] ...,
array [9][0], array [9][1], array [9][2].
Розглянемо тривимірний масив: int M [10][2][3].
M[0], M[9] – одновимірні масиви, елементи яких є двовимірні масиви (матриці) int [2][3], що займають (2 х 3 х sizeof (int)) байт; M[0][0], M[0][1] – одновимірні масиви, елементи яких є одновимірні масиви (вектора) int [3], що займають (3 х sizeof (int)) байт; M[0][1][1], M[0][1][0] – значення типа int, що займають sizeof (int) байт.
В разі опису масиву double M [10][2][3], елементи M[0][1][0], M[0][1][1] є значення типа double, що займають sizeof(double) байт.