//
vector
Два указателя, используемые при создании вектора ivec
, отмечают диапазон значений, используемых для инициализации его элементов. Второй указатель указывает на следующий элемент после последнего копируемого. В данном случае для передачи указателей на первый и следующий после последнего элементы массива int_arr
использовались библиотечные функции begin()
и end()
(см. раздел 3.5.3). В результате вектор ivec
содержит шесть элементов, значения которых совпадают со значениями соответствующих элементов массива int_arr
.
Определяемый диапазон может быть также подмножеством массива:
//
vector
Этот код создает вектор subVec
с тремя элементами, значения которых являются копиями значений элементов от intarr[1]
до intarr[3]
.
Указатели и массивы на удивление сильно подвержены ошибкам. Частично проблема в концепции: указатели используются для низкоуровневых манипуляций, в них очень просто сделать тривиальные ошибки. Другие проблемы возникают из-за используемого синтаксиса, особенно синтаксиса объявлений.
Упражнение 3.41. Напишите программу, инициализирующую вектор значениями из массива целых чисел.
Упражнение 3.42. Напишите программу, копирующую вектор целых чисел в массив целых чисел.
Строго говоря, никаких
При определении массива, элементы которого являются массивами, указываются две размерности: размерность самого массива и размерность его элементов.
int ia[3][4]; //
//
//
//
int arr[10][20][30] = {0}; //
Как уже упоминалось в разделе 3.5.1, может быть легче понять эти определения, читая их изнутри наружу. Сначала можно заметить определяемое имя, ia
, далее видно, что это массив размером 3. Продолжая вправо, видим, что у элементов массива ia
также есть размерность. Таким образом, элементы массива ia
сами являются массивами размером 4. Глядя влево, видно, что типом этих элементов является int
. Так, ia
является массивом из трех элементов, каждый из которых является массивом из четырех целых чисел.
Прочитаем определение массива arr
таким же образом. Сначала увидим, что arr
— это массив размером 10 элементов. Элементы этого массива сами являются массивами размером 20 элементов. У каждого из этих массивов по 30 элементов типа int
. Нет предела количеству используемых индексирований. Поэтому вполне может быть массив, элементы которого являются массивами массив, массив, массив и т.д.
В двумерном массиве первую размерность зачастую называют
Подобно любым массивам, элементы многомерного массива можно инициализировать, предоставив в фигурных скобках список инициализаторов. Многомерные массивы могут быть инициализированы списками значений в фигурных скобках для каждого ряда.
int ia[3][4] = { //
{0, 1, 2, 3}, //
{4, 5, 6, 7}, //
{8, 9, 10, 11} //
};
Вложенные фигурные скобки необязательны. Следующая инициализация эквивалентна, хотя и значительно менее очевидна:
//