1#ifndef STATIC_VECTOR_HH
2#define STATIC_VECTOR_HH
9#include <initializer_list>
29template<
typename T,
size_t N>
42 assert(list.size() <= N);
43 std::copy(list.begin(), list.end(), data.data());
44 sz = SizeType(list.size());
47 template<
typename Range>
49 for (
auto&& elem : range) {
54 [[nodiscard]]
constexpr auto begin() const noexcept {
return data.begin(); }
55 [[nodiscard]]
constexpr auto end() const noexcept {
return data.begin() + sz; }
57 [[nodiscard]]
constexpr size_t size()
const {
return sz; }
58 [[nodiscard]]
constexpr bool empty()
const {
return sz == 0; }
60 [[nodiscard]]
constexpr T&
operator[](
size_t index) {
return data[index]; }
61 [[nodiscard]]
constexpr const T&
operator[](
size_t index)
const {
return data[index]; }
63 constexpr void push_back(
const T& a) { assert(sz < N); data[sz++] = a; }
65 constexpr void clear() { sz = 0; }
67 operator std::span< T>() {
return {data.data(), sz}; }
68 operator std::span<const T>()
const {
return {data.data(), sz}; }
71 std::array<T, N> data = {};
constexpr auto begin() const noexcept
constexpr T & operator[](size_t index)
constexpr static_vector(from_range_t, Range &&range)
constexpr static_vector(std::initializer_list< T > list)
constexpr const T & operator[](size_t index) const
constexpr static_vector()=default
constexpr auto end() const noexcept
constexpr size_t size() const
constexpr bool empty() const
constexpr void push_back(const T &a)
constexpr vecN< N, T > max(const vecN< N, T > &x, const vecN< N, T > &y)
auto copy(InputRange &&range, OutputIter out)
constexpr from_range_t from_range