一時コンテナを使用した Range パイプラインの作成
range-v3 で、ベクトルを作成するには、その関数を範囲のすべての要素にマップし、結果として得られるすべてのベクトルをすべての要素を含む単一の範囲に平坦化するパイプラインを作成することが不可欠です。
最初は、次のようなパイプラインを作成しようとするかもしれません。 as:
<code class="cpp">auto rng = src | view::transform(f) | view::join;</code>
ただし、f によって生成されるような一時コンテナのビューを作成することが不可能であるため、このアプローチは以前は実現できませんでした。
この問題に対処するために、パッチが作成されました。が導入され、そのような範囲パイプラインを正しく記述できるようになりました。重要なのは、次の例に示すように、パイプラインに views::cache1 演算子を追加することです:
<code class="cpp">auto rng = views::iota(0, 4) | views::transform([](int i) { return std::string(i, char('a' + i)); }) | views::cache1 | views::join('-');</code>
これにより、パイプラインが一時コンテナを正しく処理できるようになり、
質問で説明されている問題の解決策は、パイプラインを次のように変更することです:
<code class="cpp">auto rng = src | views::transform(f) | views::cache1 | views::join;</code>
以上が一時コンテナーで範囲パイプラインを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。