Размер std::array
фиксируется во время компиляции.Если вам нужно добавить другое значение во время выполнения, вы должны использовать std::vector
(или что-то подобное).Самое близкое, что вы можете получить к «добавлению» к std::array
, - это если вы скопируете его содержимое в массив с еще одним элементом, который содержит «добавленное» значение.Вы можете использовать некоторые методы метапрограммирования шаблонов, чтобы упростить это:
template <typename T, std::size_t N, typename X, std::size_t... I>
std::array<T, N + 1> push_back(std::array<T, N> const& a, X&& x, std::index_sequence<I...>) {
return {std::get<I>(a)..., std::forward<X>(x)};
}
template <typename T, std::size_t N, typename X>
std::array<T, N + 1> push_back(std::array<T, N> const& a, X&& x) {
return detail::push_back(a, std::forward<X>(x), std::make_index_sequence<N>());
}
Пример использования:
std::array<int, 2> a = {1, 2};
std::array<int, 3> b = push_back(a, 3);
for (int x : b) {
std::cout << x << "\n";
}