Video: Visual C++: Creating an Executable (.exe) File (2010) 2024
Pengaturcara C ++ melintang melalui array dengan menyediakan indeks setiap elemen. Walau bagaimanapun, teknik ini tidak berfungsi untuk bekas seperti senarai yang tidak membenarkan akses rawak. Kita boleh membayangkan penyelesaian yang berasaskan kaedah seperti getFirst () dan getNext () ; bagaimanapun, para pereka Perpustakaan Templat Standard ingin menyediakan kaedah yang biasa untuk melintasi mana-mana jenis bekas.
Untuk ini, Perpustakaan Templat Standard mentakrifkan penyesuai itu.
An iterator adalah objek yang menunjuk kepada ahli-ahli sebuah bekas. Secara umum, setiap iterator menyokong fungsi berikut:
-
Kelas boleh mengembalikan penyesuai yang menunjuk kepada ahli kumpulan pertama.
-
Pemula boleh dipindahkan dari satu anggota ke seterusnya.
-
Iterator mengembalikan tanda apabila ia sampai ke akhir senarai.
-
Program ini boleh mengambil elemen yang ditunjuk oleh penyesuai.
Perpustakaan Templat Standard juga menyediakan pembalik berulang untuk bergerak mundur melalui senarai. Segala sesuatu di sini mengenai iterator juga digunakan untuk reverser iterators.
Kod yang perlu untuk berulang melalui senarai adalah berbeza daripada yang diperlukan untuk melintasi vektor (untuk menamakan hanya dua contoh). Walau bagaimanapun, penganalisis menyembunyikan butiran ini.
Kaedah mula () mengembalikan penyesuai yang menunjuk kepada elemen pertama senarai. Operator indirection * () mengambil rujukan kepada objek yang ditunjukkan oleh penyerang. Operator ++ memindahkan penyesuai ke elemen seterusnya dalam senarai.
Program terus meningkat melalui senarai sehingga penyesuai adalah sama dengan nilai yang dikembalikan pada akhir () . Coretan kod berikut bermula pada permulaan senarai pelajar dan memaparkan setiap nama mereka:
void displayStudents (senarai & pelajar) {// memperuntukkan penyesuai yang menunjuk ke elemen // pertama dalam senarai senarai:: iterator iter = pelajar. mulakan (); / / terus gelung melalui senarai sehingga // iterator menjejaskan akhir senarai sementara (iter! = pelajar akhir ()) {// mendapatkan Pelajar titik permulaan di Pelajar & s = * iter; cout << s. sName << endl; / // kini mengalihkan penyesaran ke elemen seterusnya // dalam senarai iter ++;}}
Pernyataan untuk lelaran boleh menjadi sangat kompleks. Ini mungkin pembenaran terbaik untuk deklarasi auto yang diperkenalkan dengan standard '11:
untuk (auto iter = pelajar.) Bermula ();Ini mengisytiharkan ia menjadi pemula jenis apa sahaja yang dikembalikan oleh senarai kaedah:: begin () , mengelakkan perisytiharan penyiksaan yang ditunjukkan dalam coretan kod sebelumnya.Betapa sejuknya!