Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh mengubah julat tak terhingga dengan fungsi mengembalikan bekas sementara dalam julat-v3?

Bagaimanakah saya boleh mengubah julat tak terhingga dengan fungsi mengembalikan bekas sementara dalam julat-v3?

Barbara Streisand
Barbara Streisandasal
2024-10-30 04:42:03394semak imbas

How can I transform an infinite range with a function returning temporary containers in range-v3?

Transformasi Julat Paip-v3 dengan Bekas Sementara

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.

Isu: Mengubah Julat dengan Fungsi Mengembalikan Vektor 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. Melaksanakan kod ini akan mengakibatkan ralat penyusunan kerana view::transform mencipta paparan bekas sementara yang dikembalikan oleh f.

Penyelesaian: Memperkenalkan Operator Cache1

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;

Contoh Kod

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>

Sifat Julat

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn