std::array
| Определено в заголовочном файле <array>
|
||
| template< class T, |
(начиная с C++11) | |
std::array это контейнер, инкапсулирующий массив фиксированного размера.
Этот контейнер является агрегатным типом с той же семантикой, что и структура, содержащая массив в стиле C T[N] в качестве единственного нестатического элемента данных. В отличие от массива в стиле C, он не распадается на T* автоматически. Как агрегатный тип, он может быть инициализирован с помощью агрегатной инициализации с указанием не более чем N инициализаторов, которые можно преобразовать в T: 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 элементов одного типа.
Содержание |
[править] Аннулирование итератора
Как правило, итераторы массива никогда не становятся недействительными в течение всего времени существования массива. Однако следует отметить, что во время обмена итератор будет продолжать указывать на тот же элемент массива и, таким образом, будет изменять его значение.
[править] Типы элементы
| Тип элемент | Определение | ||||||
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
|
| ||||||
const_iterator
|
| ||||||
reverse_iterator
|
std::reverse_iterator<iterator> | ||||||
const_reverse_iterator
|
std::reverse_iterator<const_iterator> | ||||||
[править] Функции-элементы
Неявно определённые функции-элементы | |
| (конструктор) (объявлено неявно) |
инициализирует массив в соответствии с правилами агрегатной инициализации (обратите внимание, что инициализация по умолчанию может привести к неопределённым значениям для неклассового T) (public функция-элемент) |
| (деструктор) (объявлено неявно) |
уничтожает каждый элемент массива (public функция-элемент) |
| operator= (объявлено неявно) |
перезаписывает каждый элемент массива соответствующим элементом другого массива (public функция-элемент) |
Доступ к элементам | |
| (C++11) |
предоставляет доступ к указанному элементу с проверкой границ (public функция-элемент) |
| (C++11) |
предоставляет доступ к указанному элементу (public функция-элемент) |
| (C++11) |
предоставляет доступ к первому элементу (public функция-элемент) |
| (C++11) |
предоставляет доступ к последнему элементу (public функция-элемент) |
| (C++11) |
прямой доступ к базовому массиву (public функция-элемент) |
Итераторы | |
| (C++11) |
возвращает итератор на начало (public функция-элемент) |
| (C++11) |
возвращает итератор на конец (public функция-элемент) |
| (C++11) |
возвращает обратный итератор на начало (public функция-элемент) |
| (C++11) |
возвращает обратный итератор на конец (public функция-элемент) |
Ёмкость | |
| (C++11) |
проверяет, пуст ли контейнер (public функция-элемент) |
| (C++11) |
возвращает количество элементов (public функция-элемент) |
| (C++11) |
возвращает максимально возможное количество элементов (public функция-элемент) |
Операции | |
| (C++11) |
заполняет контейнер указанным значением (public функция-элемент) |
| (C++11) |
меняет местами содержимое (public функция-элемент) |
[править] Функции, не являющиеся элементами
| (убрано в C++20) (убрано в C++20) (убрано в C++20) (убрано в C++20) (убрано в C++20) (C++20) |
лексикографически сравнивает значения в array (шаблон функции) |
| (C++11) |
предоставляет доступ к элементу array (шаблон функции) |
| (C++11) |
специализация алгоритма std::swap (шаблон функции) |
| (C++20) |
создаёт объект std::array из встроенного массива (шаблон функции) |
[править] Вспомогательные классы
| (C++11) |
получает размер array (специализация шаблона класса) |
получает тип элементов array (специализация шаблона класса) | |
[править] Руководства по выводу (начиная с C++17)
[править] Пример
#include <string> #include <iterator> #include <iostream> #include <algorithm> #include <array> 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::array<std::string, 2> a3 = { std::string("a"), "b" }; // поддерживаются контейнерные операции std::sort(a1.begin(), a1.end()); std::reverse_copy(a2.begin(), a2.end(), std::ostream_iterator<int>(std::cout, " ")); std::cout << '\n'; // поддерживается диапазонный цикл for for(const auto& s: a3) std::cout << s << ' '; // руководство по выводу для создания массива (начиная с C++17) [[maybe_unused]] std::array a4{3.0, 1.0, 4.0}; // -> std::array<double, 3> }
Вывод:
3 2 1 a b
[править] Смотрите также
| создаёт объект std::array, размер и, возможно, тип элемента выводится из аргументов (шаблон функции) | |

