В предыдущей статье мы с вами обсуждали только одномерные массивы. Но в этой статье мы пройдем немного дальше.
Вы должны знать, что C++ поддерживает массивы с более чем одним измерением. Такие массивы называются многомерными. Многомерные массивы обычно упорядочиваются в табличной форме, т. е. по строкам.
Многомерные массивы
Рассмотрим многомерный массив размеров 3×2, т.е. 3 строки и 2 столбца.
Представим этот массив следующим образом:
R1c1 | R2c2 |
R2c1 | R2c2 |
R3c1 | R3c2 |
Как показано в приведенном выше представлении, каждая ячейка, например R1C1 , будет содержать содержимое массива.
Количество элементов, присутствующих в многомерном массиве, является произведением его размеров. Это означает, что если размеры массива равны 3×2, то количество элементов в этом массиве равно произведению 3 и 2, т.е. 6. Точно так же, если размеры многомерного массива равны [10][20][10] тогда количество элементов в этом массиве равно 10*20*10 = 2000.
Двумерный массив — это простейшая форма многомерного массива, используемого в C++.
Объявление массива
Общее объявление многомерного массива в C++ показано ниже:
1 |
dataType arrayName [size1][size2]….[sizen]; |
dataType — это тип данных массива. Тип данных должен поддерживаться C++.
arrayName — имя многомерного массива.
Size1, size2….sizen — размеры каждого из измерений массива.
Например, давайте объявим массив размером 3×2, то есть двумерный массив, myarray_2d.
1 |
int myarray_2d [3][2]; |
Двумерный массив представляется в виде строк и столбцов.
Таким образом, приведенное выше объявление массива можно представить следующим образом:
myarray_2d[0][0] | myarray_2d[0][1] |
myarray_2d[1][0] | myarray_2d[1][1] |
myarray_2d[2][0] | myarray_2d[2][1] |
Как показано в приведенном выше представлении, доступ к каждому элементу двумерного массива осуществляется как myarray_2d[i][j], где i — номер строки в диапазоне от 0 до n-1, где n — размер измерения, а j — размер. номер столбца в диапазоне от 0 до m-1, где m — размер столбца.
Инициализация многомерных массивов
Мы можем инициализировать многомерные массивы аналогично одномерным массивам. Многомерные массивы инициализируются построчно.
Есть два способа, с помощью которых мы можем инициализировать многомерные массивы.
1) Рассмотрим массив размерностей [3][2] с именем myarray:
1 |
int myarray[3][2] = {1, 2,3,4,5,6}; |
Здесь инициализация массива осуществляется слева направо построчно. Поскольку размеры равны [3][2], первые два элемента образуют первую строку и так далее.
Графическое представление этой инициализации будет выглядеть так, как показано ниже:
1 | 2 |
3 | 4 |
5 | 6 |
2) Тот же самый массив, показанный выше, можно инициализировать другим способом, как показано ниже:
1 |
int myarray[3][2] = { {1,2}, {3,4}, {5,6} }; |
Здесь инициализация выполняется слева направо, и каждый элемент соответствует одной строке. Поскольку в этом массиве три строки, у нас есть три внутренних элемента, заключенных в фигурные скобки ({}).
Такой способ инициализации более читабелен и удобен при увеличении размера массива.
Доступ к многомерным массивам
Доступ к элементам многомерного массива осуществляется с использованием индекса строки и индекса столбца.
Давайте посмотрим на пример двумерного массива с размерами [3][3]. Ниже приведен код для его инициализации:
1 2 3 4 |
int newarray [3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; |
Если мы хотим получить доступ ко второму элементу в первой строке и присвоить его целочисленной переменной, тогда строка кода будет такой:
1 |
int val_2d = newarray[0][1]; |
Ниже приведен пример программы, демонстрирующей объявление, инициализацию и доступ к двумерному массиву:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> using namespace std; int main() { int myarray[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; for(int i=0;i <3;i++) { for(int j=0;j<3;j++) { cout<<myarray[i][j]<<" "; } } return 0; } |
Вывод данных:
1 2 3 4 5 6 7 8 9
Как показано в приведенной выше программе, двумерный массив объявляется, а затем инициализируется. Затем, чтобы получить доступ ко всем элементам массива и распечатать их, мы установили два цикла for. Внешний цикл for предназначен для доступа к элементам построчно. Внутренний цикл for действует как счетчик для доступа к элементам в каждом столбце.
Таким образом мы получаем доступ к каждому элементу этого двумерного массива и видим его на экране.
Вывод
Многомерные массивы могут иметь любое количество измерений, и по мере увеличения количества измерений соответственно увеличивается и сложность.
Хотя мы использовали двумерные массивы во всех приведенных выше примерах, мы можем аналогичным образом кодировать массивы с более высокими размерностями.
В следующей статье мы с вами поговорим о том, как использовать массивы с функциями В C++.
С Уважением, МониторБанк