一時コンテナを使用した Range パイプラインの作成
range-v3 で、ベクトルを作成するには、その関数を範囲のすべての要素にマップし、結果として得られるすべてのベクトルをすべての要素を含む単一の範囲に平坦化するパイプラインを作成することが不可欠です。
最初は、次のようなパイプラインを作成しようとするかもしれません。として:
auto rng = src | view::transform(f) | view::join;
ただし、f によって生成されるような一時コンテナのビューを作成することが不可能であるため、このアプローチは以前は実現できませんでした。
この問題に対処するために、パッチが作成されました。が導入され、そのような範囲パイプラインを正しく記述できるようになりました。重要なのは、次の例に示すように、パイプラインに views::cache1 演算子を追加することです:
auto rng = views::iota(0, 4)
| views::transform([](int i) { return std::string(i, char('a' i)); })
| views::cache1
| views::join('-');
これにより、パイプラインが一時コンテナを正しく処理できるようになり、一時コンテナを効果的に利用する範囲パイプラインを作成できるようになります。
で説明されている問題については、という質問がありましたら、解決策はパイプラインを次のように変更することです。
auto rng = src | views::transform(f) | views::cache1 | views::join;
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3