Класс array: массив фиксированного размера

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

#include <array>

Создание массива и заполнение значениями

Объявление класса array:

template<typename T, std::size_t N> struct array;

При создании экземпляра класса array после названия класса внутри угловых скобок через запятую задается тип данных элементов массива и его фиксированный размер:

std::array<int, 10> arr;
std::cout << arr.size() << std::endl;     // 10
std::cout << arr.max_size() << std::endl; // 10
std::cout << std::boolalpha <<
             arr.empty() << std::endl;    // false

В этом примере мы создали массив элементов типа int, содержащий 10 элементов. Массив имеет фиксированный размер и размещается в обычной памяти, а не в динамической. Изменить размер массива после создания объекта нельзя. Получить количество элементов позволяют методы size() и max_size(). Для определения, является ли массив пустым, можно использовать метод empty().

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

std::array<int, 5> arr1{1, 2, 3, 4, 5};
for (int &el : arr1) std::cout << el << ' ';
std::cout << std::endl; // 1 2 3 4 5
std::array<int, 5> arr2 = {6, 7, 8};
for (int &el : arr2) std::cout << el << ' ';
std::cout << std::endl; // 6 7 8 0 0

Если количество значений внутри фигурных скобок меньше количества элементов массива, то остальные элементы автоматически получат значение 0. Присвоить всем элементам массива одинаковое значение позволяет метод fill():

std::array<int, 5> arr;
arr.fill(1);
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 1 1 1 1 1

С помощью метода swap() можно поменять элементы двух массивов местами:

std::array<int, 5> arr1, arr2;
arr1.fill(1);
arr2.fill(2);
arr1.swap(arr2);
for (int &el : arr1) std::cout << el << ' ';
std::cout << std::endl; // 2 2 2 2 2
for (int &el : arr2) std::cout << el << ' ';
std::cout << std::endl; // 1 1 1 1 1

Над двумя объектами класса array определены операции ==, !=, <, <=, > и >=. Пример сравнения двух объектов:

std::array<int, 2> arr1 = {5, 1};
std::array<int, 2> arr2 = {5, 1};
if (arr1 == arr2) {
   std::cout << "arr1 == arr2" << std::endl;
}

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

std::array<int, 2> arr1 = {5, 1}, arr2;
arr2 = arr1;
for (int &el : arr2) std::cout << el << ' ';
std::cout << std::endl; // 5 1

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов