TL;DR
どのようにして同じ結果を得ることができますか
std::copy(std::begin(a), std::end(a), std::begin(b));
range-v3、そしておそらくその素晴らしい構文を使用していますか?
編集
私が問題を抱えていた理由は、 を正しく使用する方法を誤解していたことranges::copy
です。2 番目の引数は、範囲オブジェクトではなくiteratorでなければなりません。私のせいです;)
それにもかかわらず、次のように、範囲指定された割り当てを実行するために、ある種の構文糖衣が利用できるかどうかをまだ尋ねています。
ranges::???(b) = a | op1 | op2 | ... ;
問題
2 つの固定サイズのベクトルがあります (実行時)。最初のベクトルでデータの複雑な変換を実行し、結果を 2 番目のベクトルに格納する必要があります。最初のベクトルを保持する必要があり、新しい一時ベクトルを作成したくありません。
共通コード
using namespace std;
vector<double> a;
...
vector<double> b(a.size());
標準で
transform(begin(a), end(a), begin(b), complexFun);
ハイブリッド std-rangev3
auto transformation = a | ranges::view::transform(complexFun);
copy(begin(transformation), end(transformation), begin(b));
この単純なケースでは、そうする必要はほとんどありません。ただし、複数の操作が関係する場合は、範囲ビューを作成してから使用するstd::copy
と特に便利です。
書きたいこと
ranges::???(b) = a | ranges::view::transform(complexFun);
私が期待しているのは、この機能が既に存在していて、見つけることができないということです。