Çok kısaca... :)
Yalnızca dizi ve bağlı liste topluluklarını ele alalım. Belirli numaralı bir dizi elemanına erişim için [] işleci kullanılır. Bağlı listede ise başından o numaraya kadar ilerlemek gerekir.
Algoritma olarak da "şu aralıktaki elemanları rastgele karıştır" anlamına gelen karıştır diye bir algoritma düşünelim.
Erişici diye bir kavram olmasa, ancak bütün topluluğu karıştırabiliriz. Ek olarak, dizi karıştırma ve bağlı liste karıştırma algoritmalarını farklı farklı yazmak zorunda kalırız.
Erişiciler (iterator), algoritmalarla toplulukları birbirlerinden soyutlarlar. karıştır, baş tarafı ve sonu belirleyen iki erişici alacak şekilde tasarlarsak, topluluğun kendi içindeki belirli bir aralığı bile karıştırabiliriz:
// Hepsini değil, ortasını karıştır
karıştır(dizi.begin() + 3, dizi.end() - 5);
// Aynı algoritma liste için de çalışır
karıştır(liste.begin() + 3, liste.end() - 5);
(Aslında liste için perde arkasında daha hızlı başka algoritma kullanılıyor da olabilir ama kullanıcı kodu açısından aynı şekilde yazılır.)
Erişicilerin yararı o...
Aralıklar (range) yalnızca 0..10 gibi sayı aralıkları değil, bir topluluğun belirli bir eleman aralığı anlamına geliyor.
Aralıklar, aslında perde arkasından o iki erişinin bir araya gelmesinden başka bir şey değildir. Aralık kullanan karıştır işlevi şöyle yazılabilir:
karıştır(istediğim_dizi_aralığı);
karıştır(istediğim_liste_aralığı);
İki erişici bir araya gelince, artık algoritmalardan aralıklar döndürülebiliyor. (İşlevlerin tek dönüş değeri olabildiği için iki erişici döndüremezler.) Böylece algoritmalar lego parçaları gibi birbirlerine bağlanabiliyorlar.
Temelde o... :)
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
Permalink
Reply