§ 15. Двухмерныя масівы

15.1. Апісанне двухмернага масіву

Колькасць індэксаў, па якіх звяртаюцца да элемента ў масіве, вызначае размернасць масіву.

Акрамя аднамерных, могуць выкарыстоўвацца двухмерныя, трохмерныя і іншыя масівы.

Двухмерны масіў — масіў, элементамі якога з’яўляюцца аднамерныя масівы. Яго можна выявіць як табліцу з данымі, у якой кожны радок — лінейны масіў. Зварот да элемента ажыццяўляецца па двух індэксах: a[3][5] — элемент, змешчаны ў радку, які мае індэкс тры, і слупку з індэксам пяць. Прыкладам выкарыстання двухмернага масіву з’яўляецца ліст электроннай табліцы.

Двухмерны масіў апісваюць наступным чынам:

vector <vector <тып элементаў>> імя_масіву
(колькасць радкоў, 
vector <тып элементаў>(колькасць слупкоў));

Структура апісання здаецца дастаткова складанай, аднак яна цалкам адлюстроўвае сутнасць: двухмерны вектар — лінейны вектар, элементамі якога з’яўляюцца лінейныя вектары. Другі параметр у круглых дужках паказвае, якім значэннем трэба запоўніць кожны радок. У прыкладзе 15.1 паказана, як можна апісваць двухмерныя вектары.

Па аналагічнай схеме можна апісваць масівы вялікіх размернасцяў.

Шматмерныя масівы выкарыстоўваюцца ў вылічальнай матэматыцы. Пры  мадэліраванні аб’ектаў, працэсаў і з’яў шматмерныя масівы дазваляюць захоўваць параметры мадэлі і дыяпазоны іх змянення.

Для шматмерных масіваў выкарыстоўваюць наступныя назвы: аднамерны масіў — вектар, двухмерны масіў — матрыца (прамавугольная табліца), трохмерны масіў — куб (набор аднатыпных табліц).

Для вызначэння шматмернага масіву большай размернасці выкарыстоўваюць паняцце тэнзар. Чатырохмерны, пяцімерны, шматмерны масіў — тэнзар.

Прыклад 15.1. Апісанне двухмерных масіваў.

Апісанне двухмернага масіву цэлых лікаў з 10 радкоў і 10 слупкоў.

  vector <vector <int>> d(10, vector <int> (10));  

Апісанне двухмернага масіву, памеры якога ўводзяць з клавіятуры:

cout << "kol-vo strok i";

cout << "stolbcov" << endl;

cin >> m >> n;

vector <vector <int>> d(m, vector <int> (n));

Выкарыстанне typedef (вызначэнне тыпу) для апісання двухмернага масіву:

typedef vector <int> lv;

int main()

{

  int n, m;

  cout << "kol-vo strok i";

  cout << "stolbcov" << endl;

  cin >> m >> n;

  vector <lv> d(n, lv (m));