TL;DR
Как можно получить те же результаты, что и
std::copy(std::begin(a), std::end(a), std::begin(b));
используя range-v3 и, возможно, его приятный синтаксис?
ИЗМЕНИТЬ
Причина, по которой у меня возникли проблемы, заключается в непонимании того, как правильно использовать ranges::copy
: второй аргумент должен быть итератором, а не объектом range. Моя вина ;)
Тем не менее, я все еще спрашиваю, доступен ли какой-то синтаксический сахар для выполнения ранжированного присваивания, как показано ниже:
ranges::???(b) = a | op1 | op2 | ... ;
Проблема
У меня есть два вектора фиксированного размера (во время выполнения). Мне нужно выполнить некоторое сложное преобразование данных в первом векторе и сохранить результаты во втором векторе. Мне нужно сохранить первый вектор, и я не хочу создавать новый временный вектор.
Общий код
using namespace std;
vector<double> a;
...
vector<double> b(a.size());
со станд.
transform(begin(a), end(a), begin(b), complexFun);
Гибридный стандарт-rangev3
auto transformation = a | ranges::view::transform(complexFun);
copy(begin(transformation), end(transformation), begin(b));
В этом простом случае в этом нет необходимости. Однако, если задействовано более одной операции, создание представления диапазона с использованием std::copy
особенно полезно.
Что я хотел бы написать
ranges::???(b) = a | ranges::view::transform(complexFun);
Я ожидаю, что эта функция уже существует, и я не могу ее найти.