TL;博士
怎么可能得到相同的结果
std::copy(std::begin(a), std::end(a), std::begin(b));
使用 range-v3,可能还有它的好语法?
编辑
我遇到麻烦的原因是对如何正确使用的误解ranges::copy
:第二个参数必须是迭代器,而不是范围对象。我的错 ;)
尽管如此,我仍然在询问是否可以使用某种语法糖来执行范围分配,如下所示:
ranges::???(b) = a | op1 | op2 | ... ;
问题
我有两个固定大小的向量(在运行时)。我需要对第一个向量中的数据进行一些复杂的转换,并将结果存储在第二个向量中。我需要保留第一个向量,我不想创建一个新的临时向量。
通用代码
using namespace std;
vector<double> a;
...
vector<double> b(a.size());
与标准
transform(begin(a), end(a), begin(b), complexFun);
混合标准范围 v3
auto transformation = a | ranges::view::transform(complexFun);
copy(begin(transformation), end(transformation), begin(b));
在这种简单的情况下,这样做有点不必要。但是,如果涉及多个操作,则创建范围视图然后使用std::copy
特别有用。
我想写什么
ranges::???(b) = a | ranges::view::transform(complexFun);
我期待的是这个功能已经存在,我找不到它。