Video: Section, Week 2 2024
C ++ programcısı, her öğenin dizinini sağlayarak bir dizi üzerinden yineledi. Bununla birlikte, bu teknik, liste gibi, rastgele erişime izin vermeyen kaplar için çalışmaz. Bir yöntemi, getFirst () ve getNext () gibi yöntemleri temel alan bir çözüm düşünebiliriz; Bununla birlikte, Standart Şablon Kütüphanesi tasarımcıları her tür konteyneri geçmek için ortak bir yöntem sunmak istediler.
Bunun için Standart Template Library yineleyiciyi tanımlar.
Bir yineleyici , bir kabın üyelerine işaret eden bir nesnedir. Genel olarak, her iterator aşağıdaki işlevleri desteklemektedir:
-
Bir sınıf, koleksiyonun ilk üyesini işaret eden bir yineleyici döndürebilir.
-
Yineleyici bir üyeden diğerine taşınabilir.
-
Yineleyici, listenin sonuna geldiğinde bir gösterge döndürür.
-
Program yineleyicinin gösterdiği elemanı alabilir.
Standart Şablon Kütüphanesi, geriye dönük olarak listeler arasında geçiş yapmak için ters yineleyiciler de sağlar. Yineleyicilerle ilgili her şey ters yineleyiciler için eşit derecede geçerlidir.
Bir listesinden yinelemek için gerekli olan kod, vektörünü () geçmek için gerekli olan koddan farklıdır (sadece iki örnek vermek gerekirse). Bununla birlikte, yineleyici bu ayrıntıları gizler.
begin () yöntemi, bir listenin ilk öğesini gösteren bir yineleyiciyi döndürür. Yönlendirme işleci * (), yineleyicinin işaret ettiği nesneye bir başvuru alır. ++ işleci yineleyiciyi listedeki bir sonraki öğeye taşır.
Bir program yineleyici, end () tarafından döndürülen değere eşit olana kadar liste boyunca ilerlemeye devam eder. Aşağıdaki kod parçacığı bir öğrenci listesinin başında başlar ve adlarının her birini görüntüler:
void displayStudents (liste ve öğrenciler) {// list listesinin ilk // öğesine işaret eden yineleyiciyi ayırır:: iterator iter = öğrenciler. başla(); // (iter! = students. end ()) {// yineleyicinin Student'ı ve s = * iter öğesini döndürdüğü sırada // yineleyicinin listenin sonuna gelene kadar listede dolaşmaya devam edin; cout << s. AdName << endl; // şimdi yineleyiciyi bir sonraki öğeye taşımak // listedeki // iter ++;}}
Yineleyiciler için bildirimler çok karmaşık hale gelebilir. (Otomatik iter = öğrenciler begin (); iter! = Öğrenciler için '11 standardı: ile tanıtılan auto
bildiriminin muhtemelen en iyi gerekçesi budur.Bu yordamı, önceki kod parçasında gösterilen işkence edilen bildirimlerin kullanılmasını önleyerek, liste:: begin () , yöntemi tarafından döndürülen türün her birinin yineleyicisi olacağını bildirir.Ne kadar serin!