rngというTの範囲があるとします。私はできるでしょうベクトルのベクトルの範囲の範囲
auto groups = ranges::view::group_by(rng, bin_op);
グループは現在Tの範囲の範囲です。
私もTさんの範囲のベクトルを取得するには、この
auto groups = ranges::view::group_by(rng, bin_op) | ranges::to_vector;
を行うことができます。しかし、この
auto groups = ranges::view::group_by(rng, bin_op)
| ranges::to_vector
| ranges::action::transform([] (auto r) { return r | ranges::to_vector; };
など
auto groups = ranges::view::group_by(rng, bin_op)
| ranges::to_vector
| ranges::action::transform([] (auto r) { return std::vector<T>{} | ranges::action::push_back; };
明らかに及ぶため、::アクション::(変換動作しませんが)、この場合には、voidを返すと「関数の結果の型は、アクションに渡されます::トランスフォームはソース範囲に書き込み可能に戻されなければなりません "。
どのように私の範囲の範囲をベクターのベクターに変えることができますか?
注:不正なタグは残念ですが、範囲/範囲-ts /範囲-v3タグが見つかりませんでした。作成することはできません。タイトルに使用できませんでした。
auto groups = ranges::view::group_by(rng, bin_op)
| ranges::view::transform(ranges::to_vector)
| ranges::to_vector;
または多分
auto groups = ranges::view::group_by(rng, bin_op)
| ranges::view::transform([] (auto r) { return r | ranges::to_vector; })
| ranges::to_vector;
(私はranges::to_vector
は、関数スタイルで使用することができることを思い出し:あなたと仮定すると
実際これは機能します。だから、内部から外部に向かってではなく、内部から外部に向かって作業するのが理想です。他の方向がうまくいかない理由は何ですか? –
@ richかもしれませんが、ベクターが存在し、範囲が怠けているので非効率です。 0のコストに対しては中間のレイジー・ベクトル範囲を持つことができますが、レイジー・レンジの中間ベクトルが存在し、コストが必要です。 – Yakk
それは完全な意味を成しています。私のハスケルの脳が気づかなかったことを恥ずかしい...助けてくれてありがとう。 –