Video: The basics of BASIC, the programming language of the 1980s. 2024
Pemrograman C ++ melakukan iterasi melalui sebuah array dengan memberikan indeks setiap elemen. Namun, teknik ini tidak bekerja untuk wadah seperti list yang tidak memungkinkan akses acak. Kita bisa membayangkan sebuah solusi yang berbasis pada metode seperti getFirst () dan getNext () ; Namun, perancang Perpustakaan Template Standar ingin menyediakan metode umum untuk melintasi semua jenis wadah.
Untuk ini, Perpustakaan Template Standar mendefinisikan iterator.
An iterator adalah objek yang menunjuk ke anggota sebuah wadah. Secara umum, setiap iterator mendukung fungsi berikut:
-
Kelas dapat mengembalikan iterator yang menunjuk ke anggota pertama koleksi.
-
Iterator dapat dipindahkan dari satu anggota ke anggota berikutnya.
-
iterator mengembalikan sebuah indikasi saat mencapai akhir daftar.
-
Program dapat mengambil elemen yang ditunjukkan oleh iterator.
Perpustakaan Template Standar juga menyediakan iterator balik untuk bergerak mundur melalui daftar. Semuanya di sini tentang iterator berlaku sama untuk iterator terbalik.
Kode yang diperlukan untuk iterasi melalui daftar berbeda dari yang diperlukan untuk melintasi vektor (untuk memberi nama dua contoh saja). Namun, iterator menyembunyikan rincian ini.
Metode mulai () mengembalikan sebuah iterator yang menunjuk ke elemen pertama dari daftar. Operator pengarahan * () mengambil referensi ke objek yang ditunjukkan oleh iterator. Operator ++ memindahkan iterator ke elemen berikutnya dalam daftar.
Program terus meningkat melalui daftar sampai iterator sama dengan nilai yang dikembalikan akhir () . Potongan kode berikut dimulai dari awal daftar siswa dan menampilkan masing-masing nama mereka:
void displayStudents (daftar & siswa) {// alokasikan sebuah iterator yang menunjuk ke elemen // yang pertama dalam daftar daftar:: iterator iter = siswa. mulai(); // teruskan loop melalui daftar sampai // iterator mencapai akhir daftar sementara (iter! = students. end ()) {// ambil Student the iterator points at Student & s = * iter; cout << s. sName << endl; // sekarang pindahkan iterator ke elemen berikutnya // dalam daftar iter ++;}}
Deklarasi untuk iterator bisa menjadi sangat kompleks. Ini mungkin merupakan justifikasi terbaik untuk deklarasi auto yang diperkenalkan dengan standar '11:
untuk (auto iter = students. Begin (); iter! = Students. End (); iter ++) {coutIni menyatakan iterator untuk menjadi iterator jenis apa pun yang dikembalikan oleh daftar metode:: begin () , hindari deklarasi yang disiksa yang ditunjukkan pada cuplikan kode sebelumnya.Betapa kerennya itu!