Инициализация двумерного массива
При создании двумерного массива имеется возможность инициализировать каждый его элемент. Прием основан на способе инициализации одномерного массива. Вспомните, что это делается указанием разделенного запятыми списка элементов, заключенного в фигурные скобки:
// Инициализация одномерного массива
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 содержит четыре строки по пять чисел в каждой.
Выражение {9 6, 10 0, 87, 101, 105} инициализирует первую строку, представляемую как maxtemps [0]. Стиль размещения каждой строки данных в отдельной строке кода улучшает читабельность.
Объявление и расположение в памяти.
Двумерный массив представляет собой совокупность строк и столбцов, на пересечении которых находится конкретное значение. Объявить двумерный массив несложно, необходимо указать количество строк и столбцов. При этом, здесь действуют все теже правила, что и при объявлении одномерного массива. Т. е. нельзя в качестве количества строк и столбцов указывать неконстантные и нецелочисленные значения.
Общий синтаксис:
тип_данных имя_массива [число_строк][число_столбцов];
Пример: const int row=3; // строки const int col=4; // столбцы int array[row][col]; // массив размером row на col(3х4) |
Инициализация.
Инициализация двумерного массива также аналогична инициализации одномерного:
1. Инициализация при создании.
Каждая строка заключается в отдельные фигурные скобки:
int array[2][2]={{1,2},{7,8}};
Значения указываются подряд и построчно вписываются в массив:
int array[2][2]={7,8,10,3};
Если значение пропущенно, оно будет инициализированно нулем:
int array[3][3]={{7,8},{10,3,5}};
|
2. Инициализация c помощью цикла.
Откроем один секрет - двумерный массив можно рассматривать как совокупность, не просто строк, а одномерных массивов. То есть, один одномерный массив, мы заполняем простым циклом, перебирая конкретные элементы, а при совокупности, нам необходимо перебирать еще и отдельные массивы.
#include<iostream> #include<stdlib.h> // в этом файле содержатся функции rand и srand #include<time.h> // в этом файле содержится функция time using namespace std; void main() {
const int row=3; // строки const int col=3; // столбцы int mr[row][col]; // массив размером row на col
// перебираем отдельные строки (одномерные массивы в совокупности) for(int i=0; i<row; i++) { // перебираем отдельные элементы каждой строки for(int j=0; j<col;j++) { // инициализация элементов значениями в диапазоне от 0 до 100 mr[i][j]=rand()%100;
// показ значений на экран cout<<mr[i][j]<<" "; }
// переход на другую строку матрицы cout<<"\n\n"; }
} |
Примечание: Обращение к конкретному элементу массива производится по номеру строки и номеру столбца, например - mr[2][1] - значение, лежащее на пересечении второй строки и первого столбца.
Работа с двумерным массивом не намного сложнее, чем с одномерным - докажем это на практике
Во многих распространенных операциях с массивами применяются операторы повторения for. Например, следующий оператор for устанавливает в нуль все элементы строки 2 массива:
for ( column = 0; column < 4; column++ )
а[ 2 ][ column ] = 0;
Оператор варьирует только второй индекс (т. е. индекс столбца). Этот оператор for эквивалентен следующим операторам присваивания:
а[ 2 ][ 0 ] = 0;
а[ 2 ][ 1 ] = 0; .
а[ 2 ] [ 2 ] = 0;
а[ 2 ][ 3 ] = 0;
Следующий вложенный оператор for определяет сумму всех элементов массива а:
total = 0;
for ( row = 0; row < 3; row++ )
for ( column = 0; column < 4; column++ )
total += a[ row ][ column ];
