Dalam julat-v3, mencipta saluran paip yang mengubah unsur julat yang berpotensi tak terhingga menggunakan fungsi pihak ketiga yang mengembalikan vektor boleh menjadi mencabar kerana ketidakupayaan untuk mencipta paparan bekas sementara.
Pertimbangkan kod berikut:
auto rng = src | view::transform(f) | view::join;
di mana src ialah julat tak terhingga jenis T dan f ialah fungsi pihak ketiga yang mengembalikan std::vector
Kemas kini terbaharu untuk julat-v3 telah diperkenalkan penyelesaian kepada isu ini: pengendali pandangan::cache1. Operator ini mencipta bekas sementara yang menyimpan output transformasi, membenarkan pandangan lain dalam saluran paip mengakses elemennya.
Untuk melaksanakan saluran paip yang diingini dengan betul, tambahkan paparan::cache1 sebelum paparan::join:
auto rng = src | view::transform(f) | views::cache1 | views::join;
Sampel kod berikut menunjukkan penggunaan paparan::cache1 dalam amalan:
<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>
Ia penting ambil perhatian bahawa julat yang diubah rng tidak mengekalkan semua sifat julat julat sumbernya. Dalam contoh di atas, ia kehilangan konsep julat ke hadapan kerana penciptaan bekas sementara.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengubah julat tak terhingga dengan fungsi mengembalikan bekas sementara dalam julat-v3?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!