Spec-Zone.ru › C++

std::array

Определено в заголовочном файле <array>
template<
    class T,
    std::size_t N
> struct array;
(с C++11)

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

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

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

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

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

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

Недействительность итераторов

Как правило, итераторы к массиву никогда не становятся недействительными на протяжении всего жизненного цикла массива. Однако следует учесть, что при обмене итератор по-прежнему будет указывать на тот же элемент массива и, таким образом, изменит его значение.

Шаблонные параметры

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

Итератор произвольного доступа и смежный итератор к value_type

(до C++17)

Итератор произвольного доступа и смежный итератор, который является литеральным типом к value_type

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

Итератор произвольного доступа, contiguous_iterator, и constexpr итератор к value_type

(с C++20)
const_iterator

Итератор произвольного доступа и смежный итератор к const value_type

(до C++17)

Итератор произвольного доступа и смежный итератор, который является литеральным типом к const value_type

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

Итератор произвольного доступа, contiguous_iterator, и constexpr итератор к const value_type

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

Члены-функции

Неявные члены функций
(конструктор)
(неявно объявлен)
инициализирует массив, следуя правилам инициализации агрегатов (обратите внимание, что неявная инициализация может привести к неопределённым значениям для не-классовых T)
(публичный член-функция)
(деструктор)
(неявно объявлен)
уничтожает каждый элемент массива
(публичный член-функция)
operator=
(неявно объявлен)
перезаписывает каждый элемент массива соответствующим элементом другого массива
(публичный член-функция)
Доступ к элементам
at
доступ к указанному элементу с проверкой границ
(публичный член-функция)
operator[]
доступ к указанному элементу
(публичный член-функция)
front
доступ к первому элементу
(публичный член-функция)
back
доступ к последнему элементу
(публичный член-функция)
data
прямой доступ к подлежащему непрерывному хранилищу
(публичный член-функция)
Итераторы
begincbegin
возвращает итератор к началу
(публичный член-функция)
endcend
возвращает итератор к концу
(публичный член-функция)
rbegincrbegin
возвращает обратный итератор к началу
(публичный член-функция)
rendcrend
возвращает обратный итератор к концу
(публичный член-функция)
Ёмкость
empty
проверяет, пуст ли контейнер
(публичный член-функция)
size
возвращает количество элементов
(публичный член-функция)
max_size
возвращает максимальное возможное количество элементов
(публичный член-функция)
Операции
fill
заполняет контейнер заданным значением
(публичный член-функция)
swap
меняет содержимое
(публичный член-функция)

Нечленные функции

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

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

std::tuple_size<std::array>
(C++11)
получает размер array
(специализация шаблона класса)
std::tuple_element<std::array>
(C++11)
получает тип элементов array
(специализация шаблона класса)

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

(с C++17)

Пример

#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <string>
 
int main()
{
    // Construction uses aggregate initialization
    std::array<int, 3> a1{{1, 2, 3}}; // Double-braces required in C++11 prior to
                                      // the CWG 1270 revision (not needed in C++11
                                      // after the revision and in C++14 and beyond)
 
    std::array<int, 3> a2 = {1, 2, 3}; // Double braces never required after =
 
    // Container operations are supported
    std::sort(a1.begin(), a1.end());
    std::ranges::reverse_copy(a2, std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
 
    // Ranged for loop is supported
    std::array<std::string, 2> a3{"E", "\u018E"};
    for (const auto& s : a3)
        std::cout << s << ' ';
    std::cout << '\n';
 
    // Deduction guide for array creation (since C++17)
    [[maybe_unused]] std::array a4{3.0, 1.0, 4.0}; // std::array<double, 3>
 
    // Behavior of unspecified elements is the same as with built-in arrays
    [[maybe_unused]] std::array<int, 2> a5; // No list init, a5[0] and a5[1]
                                            // are default initialized
    [[maybe_unused]] std::array<int, 2> a6{}; // List init, both elements are value
                                              // initialized, a6[0] = a6[1] = 0
    [[maybe_unused]] std::array<int, 2> a7{1}; // List init, unspecified element is value
                                               // initialized, a7[0] = 1, a7[1] = 0
}

Вывод:

3 2 1
E Ǝ

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/array

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API