Это можно сделать с помощью функции предстоящих диапазонов.
Вот пример использования библиотеки Eri c Ниблера range-v3
:
#include <iostream>
#include <vector>
#include <range/v3/view/concat.hpp>
#include <range/v3/view/single.hpp>
int main() {
std::vector<int> a = {1, 5, 3};
int additional = 6;
for (auto i : ranges::concat_view(ranges::single_view{additional}, a)) {
std::cout << i;
}
}
при использовании представлений все операции итератора являются ленивыми, и дополнительная память не используется (например: дополнительные векторы / массивы не создаются)
Или без for
l oop:
ranges::copy(ranges::concat_view(ranges::single_view{additional}, a), ranges::make_ostream_joiner(std::cout, ","));
(Честно говоря, мне больше нравится версия for
, хотя)
Стандартно-совместимое решение
Существует небольшая проблема с вышеприведенным решением: concat_view
не попало в C ++ 20. Если вы хотите строго совместимое решение, вы можете создать собственную версию или использовать join_view
вместо:
#include <iostream>
#include <vector>
#include <ranges>
int main() {
std::vector<int> a = {1, 5, 3};
int additional = 6;
std::vector v{{additional}, a};
for(int i : std::ranges::join_view{v}) {
std::cout << i;
}
}