Цикл for — это естественный инструмент для обработки массивов. Теперь мы сделаем еще один шаг и посмотрим, как цикл for, внутри которого находится еще один цикл for (вложенные циклы), может применяться для обработки двумерных массивов.
Для начала давайте посмотрим, что собой представляет двумерный массив. Массивы, которые мы использовали до сих пор в этой главе, относятся к одномерным массивам, потому что каждый из них можно визуализировать как одну строку данных. Двумерный массив можно визуально представить в виде таблицы, состоящей из строк и столбцов. Двумерный массив можно использовать, например, для представления квартальных показателей по продажам в разных регионах, причем каждая строка данных будет представлять один регион. Или же можно применить двумерный массив для представления положения робота на поле компьютерной игры.
В C++ не предусмотрен специальный тип представления двумерных массивов. Вместо этого создается массив, каждый элемент которого является массивом.
Например, предположим, что требуется сохранить данные о максимальной температуре в четырех городах за четырехлетний период. В этом случае можно объявить массив следующим образом:
int maxtemps[4][5];
Это объявление означает, что max terms является массивом из четырех элементов. Каждый из этих элементов сам является массивом из пяти элементов (рис. 5.5). Массив maxterms можно интерпретировать как представление четырех строк, по пять значений температуры в каждой.
Выражение maxtemps [0] означает первый элемент массива maxtemps. Таким образом, maxtemps [0] — сам по себе массив из пяти int. Первым элементом массива maxtemps [0] является maxtemps [0] [0], и этот элемент имеет тип int. Таким образом, для доступа к элементам int должны использоваться два индекса. Первый индекс можно представлять как строку таблицы, а второй — как ее столбец (рис. 5.6).
Предположим, что требуется распечатать все содержимое массива. В этом случае можно использовать цикл for для прохода по строкам и второй вложенный цикл for — для прохода по столбцам:
Для каждого значения row вложенный цикл for проходит по значениям col. Этот пример печатает символ табуляции (\t в нотации управляющих символов C++) после каждого значения и символ новой строки после каждой полной строки.