Namespaces
Variants

std:: array

From cppreference.net
Определено в заголовочном файле <array>
template <

class T,
std:: size_t N

> struct array ;
(начиная с C++11)

std::array — это контейнер, который инкапсулирует массивы фиксированного размера.

Этот контейнер является агрегатным типом с той же семантикой, что и структура, содержащая C-массив T [ N ] в качестве своего единственного нестатического члена данных. В отличие от C-массива, он не преобразуется в T * автоматически. Как агрегатный тип, он может быть инициализирован с помощью агрегатной инициализации с использованием не более N инициализаторов, преобразуемых в T : std :: array < int , 3 > a = { 1 , 2 , 3 } ; .

Структура сочетает производительность и доступность массива в стиле C с преимуществами стандартного контейнера, такими как знание собственного размера, поддержка присваивания, итераторы произвольного доступа и т.д.

std::array удовлетворяет требованиям Container и ReversibleContainer за исключением того, что конструированный по умолчанию array не является пустым и сложность обмена линейна, удовлетворяет требованиям ContiguousContainer , (начиная с C++17) и частично удовлетворяет требованиям SequenceContainer .

Существует особый случай для массива нулевой длины ( N == 0 ). В этом случае, array. begin ( ) == array. end ( ) , что является некоторым уникальным значением. Эффект от вызова front ( ) или back ( ) для массива нулевого размера не определён.

Массив также может использоваться как кортеж из N элементов одного типа.

Содержание

Инвалидация итераторов

Как правило, итераторы массива никогда не инвалидируются в течение времени жизни массива. Однако следует учитывать, что во время swap итератор продолжит указывать на тот же элемент массива и, следовательно, изменит своё значение.

Параметры шаблона

T - тип элемента. Должен быть MoveConstructible и MoveAssignable .
N - количество элементов в массиве или 0 .

Типы членов

Тип члена Определение
value_type T
size_type std::size_t
difference_type std::ptrdiff_t
reference value_type &
const_reference const value_type &
pointer value_type *
const_pointer const value_type *
iterator

LegacyRandomAccessIterator и LegacyContiguousIterator для value_type

(до C++17)

LegacyRandomAccessIterator и LegacyContiguousIterator , который является LiteralType для value_type

(с C++17)
(до C++20)

LegacyRandomAccessIterator , contiguous_iterator , и ConstexprIterator для value_type

(с C++20)
const_iterator

LegacyRandomAccessIterator и LegacyContiguousIterator для const value_type

(до C++17)

LegacyRandomAccessIterator и LegacyContiguousIterator , который является LiteralType для const value_type

(с C++17)
(до C++20)

LegacyRandomAccessIterator , contiguous_iterator , и ConstexprIterator для const value_type

(с C++20)
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >

Функции-члены

Неявно определенные функции-члены
(constructor)
(implicitly declared)
инициализирует массив в соответствии с правилами агрегатной инициализации (обратите внимание, что инициализация по умолчанию может привести к неопределенным значениям для не-классовых T )
(public member function)
(destructor)
(implicitly declared)
уничтожает каждый элемент массива
(public member function)
operator=
(implicitly declared)
перезаписывает каждый элемент массива соответствующим элементом другого массива
(public member function)
Доступ к элементам
доступ к указанному элементу с проверкой границ
(public member function)
доступ к указанному элементу
(public member function)
доступ к первому элементу
(public member function)
доступ к последнему элементу
(public member function)
прямой доступ к базовому непрерывному хранилищу
(public member function)
Итераторы
возвращает итератор на начало
(public member function)
возвращает итератор на конец
(public member function)
возвращает обратный итератор на начало
(public member function)
возвращает обратный итератор на конец
(public member function)
Вместимость
проверяет, является ли контейнер пустым
(public member function)
возвращает количество элементов
(public member function)
возвращает максимально возможное количество элементов
(public member function)
Операции
заполняет контейнер указанным значением
(public member function)
обменивает содержимое
(public member function)

Функции, не являющиеся членами класса

(C++11) (C++11) (удалено в C++20) (C++11) (удалено в C++20) (C++11) (удалено в C++20) (C++11) (удалено в C++20) (C++11) (удалено в C++20) (C++20)
лексикографически сравнивает значения двух array s
(шаблон функции)
получает доступ к элементу array
(шаблон функции)
специализирует алгоритм std::swap
(шаблон функции)
(C++20)
создаёт объект std::array из встроенного массива
(шаблон функции)

Вспомогательные классы

получает размер array
(специализация шаблона класса)
получает тип элементов array
(специализация шаблона класса)

Руководства по выводу

(начиная с C++17)

Пример

#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <string>
int main()
{
    // Конструкция использует агрегатную инициализацию
    std::array<int, 3> a1{{1, 2, 3}}; // Двойные фигурные скобки требуются в C++11 до
                                      // ревизии CWG 1270 (не нужны в C++11
                                      // после ревизии и в C++14 и выше)
    std::array<int, 3> a2 = {1, 2, 3}; // Двойные скобки никогда не требуются после =
    // Поддерживаются операции с контейнерами
    std::sort(a1.begin(), a1.end());
    std::ranges::reverse_copy(a2, std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
    // Поддерживается цикл for по диапазону
    std::array<std::string, 2> a3{"E", "\u018E"};
    for (const auto& s : a3)
        std::cout << s << ' ';
    std::cout << '\n';
    // Руководство по выводу для создания массива (начиная с C++17)
    [[maybe_unused]] std::array a4{3.0, 1.0, 4.0}; // std::array<double, 3>
    // Поведение неинициализированных элементов такое же, как у встроенных массивов
    [[maybe_unused]] std::array<int, 2> a5; // Без инициализации списком, a5[0] и a5[1]
                                            // инициализируются по умолчанию
    [[maybe_unused]] std::array<int, 2> a6{}; // Инициализация списком, оба элемента
                                              // инициализируются значением, a6[0] = a6[1] = 0
    [[maybe_unused]] std::array<int, 2> a7{1}; // Инициализация списком, неинициализированный элемент
                                               // инициализируется значением, a7[0] = 1, a7[1] = 0
}

Вывод:

3 2 1
E Ǝ

Смотрите также

изменяемый по размеру, с фиксированной ёмкостью, inplace непрерывный массив
(шаблон класса)
изменяемый по размеру непрерывный массив
(шаблон класса)
двусторонняя очередь
(шаблон класса)
(library fundamentals TS v2)
создаёт объект std::array , размер и, опционально, тип элементов которого выводятся из аргументов
(шаблон функции)