Halo lagi. Terjemahan dari materi berikut disiapkan khusus untuk siswa kursus
"Pengembang C ++" , kelas yang akan dimulai pada 27 Juni.

Perpustakaan Ranges diadopsi dalam C ++ 20 pada pertemuan komite standar di San Diego November lalu. Perpustakaan menyediakan komponen untuk memproses rentang nilai yang dirancang untuk menyederhanakan kode kami. Sayangnya, perpustakaan Ranges tidak terdokumentasi dengan baik, yang membuatnya lebih sulit untuk dipahami bagi mereka yang ingin menguasainya. Posting ini dimaksudkan untuk memberikan contoh kode yang ditulis menggunakan dan tanpa Ranges.
Implementasi perpustakaan Eric Niebler's Ranges tersedia di
sini . Ia bekerja dengan Dentang 3.6.2 atau lebih baru, gcc 5.2 atau lebih baru, dan VC ++ 15.9 atau lebih baru. Contoh kode di bawah ini telah ditulis dan diuji dengan versi kompiler terbaru. Perlu dicatat bahwa contoh-contoh ini adalah implementasi yang tipikal dan tidak selalu merupakan satu-satunya solusi yang dapat Anda temukan.
Meskipun namespace standar untuk perpustakaan Ranges adalah
std::ranges
, dalam implementasi perpustakaan saat ini adalah
ranges::v3
.
Alias ββnamespace berikut digunakan dalam contoh di bawah ini:
namespace rs = ranges::v3; namespace rv = ranges::v3::view; namespace ra = ranges::v3::action;
Juga, untuk penyederhanaan, kita akan merujuk ke objek, fungsi, dan lambda berikut:
std::string to_roman(int value) { std::vector<std::pair<int, char const*>> roman { { 1000, "M" },{ 900, "CM" }, { 500, "D" },{ 400, "CD" }, { 100, "C" },{ 90, "XC" }, { 50, "L" },{ 40, "XL" }, { 10, "X" },{ 9, "IX" }, { 5, "V" },{ 4, "IV" }, { 1, "I" } }; std::string result; for (auto const & [d, r]: roman) { while (value >= d) { result += r; value -= d; } } return result; } std::vector<int> v{1,1,2,3,5,8,13,21,34}; auto print_elem = [](auto const e) {std::cout << e << '\n'; }; auto is_even = [](auto const i) {return i % 2 == 0; };
APDATE : Saya ingin mengucapkan terima kasih kepada Eric Nibler dan semua orang yang berkomentar di bawah ini, dengan saran untuk contoh kode ini. Saya memperbarui beberapa berdasarkan ulasan mereka.Cetak semua elemen rentang:
Cetak semua elemen rentang dalam urutan terbalik:
Cetak hanya elemen genap dari rentang tersebut, tetapi dengan urutan terbalik:
Lewati dua elemen pertama rentang dan cetak hanya elemen genap dari tiga berikut:
Cetak angka dari 101 hingga 200:
Cetak semua angka Romawi dari 101 hingga 200. Untuk mengonversi angka ke angka Romawi yang sesuai, gunakan fungsi
to_roman()
ditunjukkan di atas.
Cetak angka Romawi dari tiga angka terakhir yang dapat habis dibagi 7 pada kisaran [101, 200], dalam urutan terbalik.
Buat rentang string yang berisi angka romawi dari tiga angka terakhir yang merupakan kelipatan 7 dalam kisaran [101, 200], dalam urutan terbalik.
Ubah rentang yang tidak disortir sehingga hanya mempertahankan nilai unik, tetapi dalam urutan terbalik.
Hapus dua nilai terkecil dan dua terbesar dari rentang dan biarkan sisanya diurutkan dalam kisaran kedua.
Gabungkan semua baris dalam rentang yang diberikan ke nilai tunggal.
Hitung jumlah kata (dipisahkan oleh spasi) dalam teks.
Apakah artikel itu membantu Anda? Tulis di komentar.