Daily bit(e) C++. std::array

Добавлено 25 сентября 2023 в 07:33

Daily bit(e) C++ #229, контейнер массива фиксированного размера: std::array.

Daily bit(e) C++

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.

Теги

C++ / CppDaily bit(e) C++std::arraySTL / Standard Template Library / Стандартная библиотека шаблоновМассивПрограммирование

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.