Daily bit(e) C++. std::array
Daily bit(e) C++ #229, контейнер массива фиксированного размера: std::array
.
std::array
– это контейнер, представляющий массивы фиксированного размера. Помимо интерфейса диапазона, std::array
также позволяет избежать неявного разложения на указатель (например, int[3]
на int*
).
Вдобавок ко всему, std::array
не имеет явных конструкторов, что позволяет ему поддерживать свойство тривиальной копируемости базовых данных.
#include <array>
#include <algorithm>
#include <functional>
void fun(int,int,int,int,int) {}
struct A { A(int,int,int,int,int) {} };
std::array<int,5> data{1,2,3,4,5};
// Моделирует непрерывный диапазон
std::ranges::sort(data, std::greater<>{});
// data == {5,4,3,2,1}
// Моделирует похожесть на кортеж (C++11)
int x = std::get<2>(data);
// x == 4
size_t sz = std::tuple_size<decltype(data)>{};
// sz == 5
// Начиная с C++17:
auto [a,b,c,d,e] = data;
// a == 5, b == 4, c == 3, d == 2, e == 1
// Начиная с C++23:
// Создает A с элементами data
A m = std::make_from_tuple<A>(data);
// Вызывает fun с элементами data
std::apply(fun, data);
Открыть пример на Compiler Explorer.