range-v3 では、以下を返すサードパーティ関数を使用して、潜在的に無限の範囲の要素を変換するパイプラインを作成します。一時コンテナのビューを作成できないため、ベクトルは困難になる可能性があります。
次のコードを考えてみましょう:
auto rng = src | view::transform(f) | view::join;
ここで、src は型 T の無限の範囲であり、f は std::vector
range-v3 の最近の更新では、この問題の解決策は、views::cache1 演算子です。この演算子は、変換の出力を保存する一時コンテナを作成し、パイプライン内の他のビューがその要素にアクセスできるようにします。
目的のパイプラインを正しく実装するには、views::join:
auto rng = src | view::transform(f) | views::cache1 | views::join;
<code class="cpp">auto rng = views::iota(0, 4) | views::transform([](int i) { return std::string(i, char('a' + i)); }) | views::cache1 | views::join('-'); check_equal(rng, {'-', 'b', '-', 'c', 'c', '-', 'd', 'd', 'd'});</code>
以上がrange-v3 で一時コンテナを返す関数を使用して無限の範囲を変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。