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;コード例次のコードサンプルは、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('-'); check_equal(rng, {'-', 'b', '-', 'c', 'c', '-', 'd', 'd', 'd'});</code>範囲プロパティ重要です変換された範囲 rng は、ソース範囲のすべての範囲プロパティを保持するわけではないことに注意してください。上の例では、一時コンテナの作成により、前方範囲の概念が失われます。
以上がrange-v3 で一時コンテナを返す関数を使用して無限の範囲を変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。