Kategori Iterator: input, forward, bidirectional, random
Bedakan kategori iterator dan pilih algoritma yang sesuai
Kategori Iterator: input, forward, bidirectional, random adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Apa Itu Iterator?
Iterator adalah penunjuk umum. Algoritme bekerja melalui iterator sehingga tidak bergantung pada wadah yang mendasarinya.
Lima Kategori Iterator
Iterator diklasifikasikan berdasarkan kemampuannya:
- Masukan — hanya dapat dibaca, satu lintasan
- Keluaran — hanya dapat ditulis, satu lintasan
- Maju — dapat dibaca/ditulis, banyak lintasan
- Dua Arah — dapat bergerak maju dan mundur
- Akses Acak — dapat melompat berdasarkan offset bilangan bulat
Iterator Masukan
Baca sekali, maju, lalu ulangi. Tidak dapat dikunjungi kembali. Contoh: std::istream_iterator.
std::istream_iterator<int> in(std::cin), end;
while (in != end) {
std::cout << *in << " ";
++in;
}Iterator Keluaran
Hanya dapat menulis. Contoh: std::ostream_iterator dan std::back_inserter.
std::ostream_iterator<int> out(std::cout, " ");
std::vector<int> v = {1, 2, 3};
std::copy(v.begin(), v.end(), out);Iterator Maju
Seperti iterator masukan, tetapi dapat melewati banyak lintasan — Anda dapat melakukan iterasi ulang dari posisi yang sama. Contoh: std::forward_list.
Iterator Dua Arah
Iterator maju ditambah --. Contoh: std::list, std::map, std::set.
std::list<int> l = {1, 2, 3};
auto it = l.end();
--it; // OK, points to last elementIterator Akses Acak
Iterator dua arah ditambah lompatan: it + n, it - n, it[k], it1 - it2. Contoh: std::vector, std::deque, array mentah.
Persyaratan Algoritme
Setiap algoritme menentukan kategori iterator minimum yang diperlukan. std::sort memerlukan akses acak; std::find hanya memerlukan masukan.
Sifat Iterator
std::iterator_traits<Iter> menyediakan tipe nilai iterator, kategori, dan properti lainnya pada waktu kompilasi.
using Category = std::iterator_traits<It>::iterator_category;
using Value = std::iterator_traits<It>::value_type;std::advance dan std::distance
Memindahkan iterator atau mengukur jarak secara umum. Keduanya menggunakan kategori untuk memilih implementasi yang paling efisien.
auto it = v.begin();
std::advance(it, 5); // efficient on random access, O(n) otherwise
auto d = std::distance(v.begin(), it);Iterator Kustom
Untuk menulis iterator sendiri, tentukan alias tipe dan operasi yang diperlukan untuk kategori yang dituju — operator*, operator++, operator==, dan sebagainya.
Konsep Iterator C++20
C++20 menambahkan konsep formal seperti std::input_iterator, std::forward_iterator, dan std::random_access_iterator. Konsep tersebut menggantikan sistem lama berbasis tag.
Pemeriksaan Singkat
Kategori iterator mana yang mendukung ekspresi it + n dalam waktu konstan?
Ringkasan
Iterator dikategorikan berdasarkan kemampuan — masukan, keluaran, maju, dua arah, dan akses acak. Algoritme memerlukan kategori minimum tertentu. Iterator vector memiliki akses acak; iterator list dan map memiliki akses dua arah.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Kategori Iterator: input, forward, bidirectional, random” gratis?
Ya — teks lengkap “Kategori Iterator: input, forward, bidirectional, random” 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 “Kategori Iterator: input, forward, bidirectional, random”?
Bedakan kategori iterator dan pilih algoritma yang sesuai 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 1 dari 4.
Berapa lama pelajaran “Kategori Iterator: input, forward, bidirectional, random” 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
- Kategori Iterator: input, forward, bidirectional, random
- Pola Iterator Umum: begin, end, advance
- Pengenalan Pustaka Ranges C++20
- Adaptor Rentang: views::filter, views::transform, views::take