Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вложенные циклы и двумерные массивы.docx
Скачиваний:
1
Добавлен:
24.11.2019
Размер:
3.51 Mб
Скачать

Вложенные циклы и двумерные массивы

Цикл 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 — для прохода по столбцам:

for (int row = 0; row < 4; row+ + ){

for (int col = 0; col < 5; ++col)

cout << maxtemps [row] [col] << "\t"; cout << endl;

}

Для каждого значения row вложенный цикл for проходит по значениям col. Этот пример печатает символ табуляции (\t в нотации управляющих символов C++) после каждого значения и символ новой строки после каждой полной строки.

Инициализация двумерного массива

При создании двумерного массива имеется возможность инициализировать каждый его элемент. Прием основан на способе инициализации одномерного массива. Вспомните, что это делается указанием разделенного запятыми списка элементов, заключенного в фигурные скобки:

// Инициализация одномерного массива

int btus [ 5 ] = {23, 26, 24, 31, 28};

В двумерном массиве каждый элемент сам по себе является массивом, поэтому инициализировать каждый элемент можно так, как показано в предыдущем примере. То есть инициализация состоит из разделенной запятыми последовательности одно­мерных инициализаций, каждая из которых заключена в фигурные скобки:

int maxtemps[4][5] = // двумерный массив

{96, 100, 87, 101, 105}, // значения для maxtemps[0]

{96, 98, 91, 107, 104}, // значения для maxtemps[1]

{97, 101, 93, 108, 107}, // значения для maxtemps[2]

{98, 103, 95, 109, 108} // значения для maxtemps [3]

Массив maxtemps содержит четыре строки по пять чисел в каждой.

Выражение { 96, 100, 87, 101, 105} инициализирует первую строку, представляемую как maxtemps [0]. Стиль размещения каждой строки данных в отдельной строке кода улучшает читабельность.