0Pricing
C++ Academy · Pelajaran

Pengenalan Pustaka Ranges C++20

Gunakan algoritma std::ranges yang menerima rentang, bukan pasangan iterator

Pengenalan Pustaka Ranges C++20 adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Mengapa Rentang?

STL tradisional menggunakan pasangan iterator (v.begin(), v.end()). Rentang C++20 menerima satu nilai rentang dan menambahkan kemampuan untuk dikomposisikan.

Menyertakan Rentang

Sertakan <ranges>. Ruang namanya adalah std::ranges untuk algoritme dan std::views untuk tampilan malas.

#include <ranges>
#include <algorithm>

Algoritme Rentang

Setiap algoritme standar memiliki padanan versi rentang yang menerima satu rentang, bukan dua iterator.

std::vector<int> v = {3, 1, 4, 1, 5};
std::ranges::sort(v);             // sort the whole range
auto it = std::ranges::find(v, 4);

Fungsi Proyeksi

Algoritme rentang menerima proyeksi opsional — fungsi yang diterapkan pada setiap elemen sebelum perbandingan. Hal ini menghindarkan Anda dari penulisan pembanding kustom.

struct Person { std::string name; int age; };
std::vector<Person> people;
std::ranges::sort(people, {}, &Person::age);
// sort by age, default comparison

Apa Itu Rentang?

Rentang adalah apa pun yang mendukung begin() dan end(). Wadah, array, dan (dalam C++20) tipe kustom apa pun yang menyediakan penanda batas.

Penanda Batas

C++20 menggeneralisasi end() menjadi penanda batas — tipenya tidak harus sama dengan tipe iterator. Berguna untuk aliran masukan dan rentang tak terbatas.

Tampilan: Alur Rentang Malas

Tampilan adalah rentang yang tidak memiliki elemen dan menghasilkan elemen sesuai permintaan. Komposisikan tampilan dengan operator pipa |.

auto squares = v
    | std::views::filter([](int x) { return x % 2 == 0; })
    | std::views::transform([](int x) { return x * x; });

for (int x : squares) std::cout << x << " ";

Evaluasi Malas

Tampilan tidak mengalokasikan memori atau berjalan sampai dilakukan iterasi. filter | transform | take(5) hanya menghasilkan 5 nilai yang ditransformasikan pertama — tidak lebih.

Rentang Pinjaman dan Masa Hidup

Tampilan meminjam rentang sumbernya. Jika sumbernya berakhir masa hidupnya, tampilan tersebut menjadi menggantung. Berhati-hatilah dengan tampilan atas objek sementara — meskipun C++20 menambahkan perlindungan.

Langsung vs Malas

Algoritme menghasilkan hasil secara langsung (menghitung sekarang). Tampilan bersifat malas (menghitung saat dilakukan iterasi). Pilih berdasarkan apakah Anda memerlukan hasil yang diwujudkan.

Kinerja

Alur malas menghindari wadah perantara. Kompilator sering mengoptimalkan alur seolah-olah alur tersebut merupakan satu perulangan. Periksa dengan godbolt untuk memastikannya.

Jalur Migrasi

Jika Anda tidak dapat menggunakan C++20, pustaka seperti range-v3 milik Eric Niebler menyediakan model yang sama dalam C++14/17. Pustaka tersebut layak dipelajari sekarang untuk mempermudah migrasi.

Pemeriksaan Singkat

Apa keunggulan utama rentang C++20 dibandingkan gaya STL yang menggunakan pasangan iterator?

Ringkasan

Rentang C++20 memodernisasi algoritme STL — berikan satu rentang, gunakan proyeksi, dan bangun alur malas dengan tampilan. Operator pipa mengomposisikan filter, transformasi, dan pengambilan menjadi kode yang jelas dan deklaratif.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pengenalan Pustaka Ranges C++20” gratis?

Ya — teks lengkap “Pengenalan Pustaka Ranges C++20” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pengenalan Pustaka Ranges C++20”?

Gunakan algoritma std::ranges yang menerima rentang, bukan pasangan iterator Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Pengenalan Pustaka Ranges C++20” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Kategori Iterator: input, forward, bidirectional, random
  2. Pola Iterator Umum: begin, end, advance
  3. Pengenalan Pustaka Ranges C++20
  4. Adaptor Rentang: views::filter, views::transform, views::take
← Kembali ke C++ Academy