C++ позволяет объявлять и использовать не только одномерные, но и многомерные массивы. Например, чтобы задать целочисленный массив matrix размером 5x8, нужно использовать такую конструкцию:
int matrix[5][8];
Доступ к многомерным массивам осуществляется аналогично объявлению, т.е. индексы указываются в квадратных скобках:
matrix[0][0] = 1; // первый элемент массива
matrix[0][1] = 2; // второй элемент массива
matrix[4][7] = 40; // последний элемент массива
Графически двумерный массив удобно представлять в виде матрицы, в которой сначала нумеруются строки. Например, массив 3x5:
int m[3][5]
m[0][0]
m[0][1]
m[0][2]
m[0][3]
m[0][4]
m[1][0]
m[1][1]
m[1][2]
m[1][3]
m[1][4]
m[2][0]
m[2][1]
m[2][2]
m[2][3]
m[2][4]
Следует понимать, что реально в памяти массив хранится последовательно, а не в виде таблицы. В приведённом примере за последним элементом первой строки – m[0][4] будет сразу размещен первый элемент второй строки – m[1][0], т.е. массивы любой размерности хранятся в памяти как одномерные.
Аналогично двумерному можно объявлять и массивы больших размерностей:
char ch[3][5][7]; // массив символов размером 3 x 5 x 7
float fl[5][14][2][3]; // массив вещественных чисел размером 5 x 14 x 2 x 3
Обращаться к многомерному массиву можно используя различное количество индексов. На примере трехмерного массива (куба) это будет выглядеть следующим образом:
int a[2][4][6]; – объявление массива a размером 2 x 4 x 6
a[1][2][3] – элемент массива – объект типа int
a[1][2] – одномерный массив из 6 целых чисел
a[1] – двумерный массив из целых чисел размером 4 x 6
a – трехмерный массив размером 2 x 4 x 6.
Инициализация многомерного массива выглядит следующим образом:
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
Внутренние фигурные скобки здесь необязательны, они нужны лишь для удобства чтения программы или если при инициализации указываются не все значения массива (не указанным значениям будут присвоены нули).
Пример программы поиска максимального элемента и среднего арифметического в двумерном массиве.
#include <iostream>
#include <time.h>
using namespace std;
const int n = 10; // количество строк
const int m = 15; // количество столбцов
void main()
{
short matr[n][m];
int sum = 0;
short max;
setlocale(LC_ALL, "RUSSIAN");
srand(time(NULL));
// заполнение массива случайными числами
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
matr[i][j] = (float)rand() / RAND_MAX * 100; // случайные числа от 0 до 100
cout << "Массив 10 x 15:\n";
// вывод массива на экран
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++) {
cout.width(3);
cout << matr[i][j] << ' ';
}
cout << endl;
}
max = matr[0][0]; // начальное значение max - первый элемент массива
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (matr[i][j] > max)
// найден новый максимум - записываем его в max
max = matr[i][j];
sum += matr[i][j];
}
cout << "\nМаксимальное значение в массиве: " << max << endl;