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

Barbara Streisand
Lepaskan: 2024-10-30 04:42:03
asal
408 orang telah melayarinya

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!