Iterator
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 72 dari 104.
Iterator adalah object yang berfungsi sebagai jembatan antara wadah dan algoritma. Iterator menyediakan cara yang seragam untuk mengakses elemen dalam wadah apa pun, terlepas dari cara wadah tersebut menyimpan datanya secara internal. Anggap iterator sebagai pointer umum yang tahu cara bergerak melalui wadah.
Setiap container STL menyediakan method begin() dan end(). Iterator begin() menunjuk ke elemen pertama, sedangkan end() menunjuk ke posisi setelah elemen terakhir, yaitu sentinel yang menandai tempat untuk berhenti:
#include <vector>
#include <iostream>
int main() {
std::vector<int> nums = {10, 20, 30};
for (std::vector<int>::iterator it = nums.begin(); it != nums.end(); ++it) {
std::cout << *it << " "; // Lakukan dereferensi untuk mendapatkan nilai
}
// output: 10 20 30
}Kata kunci auto sangat menyederhanakan deklarasi iterator:
for (auto it = nums.begin(); it != nums.end(); ++it) {
*it *= 2; // Ubah elemen melalui iterator
}
// nums sekarang berisi {20, 40, 60}Iterator memiliki berbagai kategori berdasarkan kemampuannya. Iterator akses acak (seperti yang berasal dari vector) mendukung operasi aritmetika seperti it + 3 atau it1 - it2.
Iterator dua arah (dari list, map) dapat bergerak maju dan mundur dengan ++ dan --. Iterator maju hanya dapat bergerak ke satu arah.
Untuk penelusuran terbalik, gunakan rbegin() dan rend():
for (auto rit = nums.rbegin(); rit != nums.rend(); ++rit) {
std::cout << *rit << " "; // Mencetak dalam urutan terbalik
}Tantangan
MudahMari kita bangun sistem pelacakan inventaris yang menggunakan iterator untuk menelusuri dan memanipulasi kumpulan item. Kamu akan berlatih menggunakan berbagai tipe iterator untuk menavigasi data dengan beragam cara.
Kamu akan menyusun kodemu dalam dua file:
Inventory.h: Definisikan classInventoryyang mengelola kumpulan jumlah item yang disimpan dalamstd::vector<int>.Class-mu harus menyediakan method berikut:
addItem(int quantity): menambahkan jumlah item ke inventarisprintForward(): menggunakan iterator denganbegin()danend()untuk mencetak semua jumlah, dipisahkan oleh spasi, lalu diikuti baris baruprintReverse(): menggunakan reverse iterator denganrbegin()danrend()untuk mencetak semua jumlah dalam urutan terbalik, dipisahkan oleh spasi, lalu diikuti baris barudoubleAll(): menggunakan iterator untuk menelusuri vector dan menggandakan setiap jumlah secara langsunggetTotal(): menggunakan iterator untuk menghitung dan mengembalikan jumlah seluruh nilai
Gunakan kata kunci
autountuk deklarasi iterator agar kodemu tetap rapi.main.cpp: Baca empat input bilangan bulat, masing-masing pada baris terpisah, yang mewakili jumlah item.Buat sebuah
Inventorydan tambahkan keempat jumlah tersebut. Lalu, tunjukkan penggunaan iterator dengan cara:- Mencetak
Forward:, lalu memanggilprintForward() - Mencetak
Reverse:, lalu memanggilprintReverse() - Mencetak
Total: <sum>menggunakangetTotal() - Memanggil
doubleAll()untuk mengubah jumlah - Mencetak
After doubling:, lalu memanggilprintForward() - Mencetak
New total: <sum>menggunakangetTotal()
- Mencetak
Contohnya, dengan input 10, 25, 15, dan 30:
Forward: 10 25 15 30
Reverse: 30 15 25 10
Total: 80
After doubling: 20 50 30 60
New total: 160Tantangan ini memberimu kesempatan untuk berlatih membaca elemen melalui iterator, untuk mencetak dan menjumlahkan, serta mengubah elemen melalui iterator, untuk menggandakannya. Kamu juga akan melihat bagaimana reverse iterator memudahkan penelusuran mundur tanpa perlu memanipulasi indeks.
Coba sendiri
#include <iostream>
#include "Inventory.h"
using namespace std;
int main() {
// Baca empat input bilangan bulat
int q1, q2, q3, q4;
cin >> q1;
cin >> q2;
cin >> q3;
cin >> q4;
// TODO: Buat object Inventory
// TODO: Tambahkan keempat jumlah ke inventaris
// TODO: Cetak "Forward: " lalu panggil printForward()
// TODO: Cetak "Reverse: " lalu panggil printReverse()
// TODO: Cetak "Total: " diikuti hasil getTotal()
// TODO: Panggil doubleAll() untuk mengubah jumlahnya
// TODO: Cetak "After doubling: " lalu panggil printForward()
// TODO: Cetak "New total: " diikuti hasil getTotal()
return 0;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Object
1Dasar-Dasar OOP
File EksternalBuild dan Kompilasi C++File Header dan File SourceNamespace dan CakupanPengantar OOP dalam C++class vs objectPointer 'this'method (Fungsi Anggota)Atribut (Anggota Data)Dasar Ctor dan DtorRingkasan: Kalkulator Sederhana4Properti class
Anggota instance vs staticGetter dan setterFungsi anggota constKata kunci mutableMethod dan variabel staticFungsi dan class friendRangkuman, Pengelola Rekening Bank7Pewarisan
Pewarisan DasarTingkat Akses pada PewarisanUrutan Pemanggilan Ctor & DtorPenimpaan methodFungsi Virtual & VTablePewarisan BergandaPewarisan VirtualRangkuman: Hierarki Karyawan10Gambaran Umum STL
Gambaran Umum dan Filosofi STLKontainer STLIteratorAlgoritma STLFunctor dan Ekspresi LambdaRangkuman: Frekuensi Kata2Manajemen Memori
Memori Stack vs HeapPointer dan ReferenceMemori Dinamis (new/delete)Smart Pointer di C++RAII di C++Rangkuman: Pengelola Array Dinamis5Enkapsulasi
Penentu Akses dalam C++Penentu Akses secara MendalamPenyembunyian Informasistruct vs classNested dan Inner classRangkuman, Sistem Catatan Siswa8Polimorfisme
Polimorfisme saat Compile vs RuntimeOverloading FungsiMeninjau Kembali Fungsi VirtualFungsi Virtual MurniKelas AbstrakDesain Interface di C++Casting Dinamis & RTTIRangkuman: Kalkulator Bentuk3Konstruktor & Destruktor
Konstruktor DefaultKonstruktor BerparameterKonstruktor SalinKonstruktor PindahDaftar Inisialisasi KonstruktorKonstruktor DelegasiKupas Tuntas DestruktorAturan Tiga, Lima, dan NolRangkuman: class String6Overloading Operator
Pengantar Overloading OperatorOverloading Operator AritmetikaOverloading Operator PerbandinganOperator StreamOverloading Operator PenugasanOverloading Operator [] dan ()Operator Konversi TipeRingkasan, class Matrix9Template
Template FungsiTemplate classSpesialisasi TemplateTemplate VariadikDasar SFINAE & Type TraitsRangkuman, Container GenerikLatihan sendiri: Compiler C++ online