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
за исключением того, что конструированный по умолчанию 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
|
|
||||||
const_iterator
|
|
||||||
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
(шаблон функции) |
|
(C++11)
|
получает доступ к элементу
array
(шаблон функции) |
|
(C++11)
|
специализирует алгоритм
std::swap
(шаблон функции) |
|
(C++20)
|
создаёт объект
std::array
из встроенного массива
(шаблон функции) |
Вспомогательные классы
|
(C++11)
|
получает размер
array
(специализация шаблона класса) |
|
(C++11)
|
получает тип элементов
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 Ǝ
Смотрите также
|
(C++26)
|
изменяемый по размеру, с фиксированной ёмкостью, inplace непрерывный массив
(шаблон класса) |
|
изменяемый по размеру непрерывный массив
(шаблон класса) |
|
|
двусторонняя очередь
(шаблон класса) |
|
|
(library fundamentals TS v2)
|
создаёт объект
std::array
, размер и, опционально, тип элементов которого выводятся из аргументов
(шаблон функции) |