any_of, all_of, none_of algoritmaları

C++11 ile gelen basit ama faydalı 3 algoritma.

any_of algoritmasıyla bir aralık (range) içindeki değerlerden herhangi birinin bir koşulu sağlayıp sağlamadığını sınayabiliyoruz:

Şablondan üretilecek işlevin ilk iki parametresi ilgili aralığa ilişkin adımlayıcılar (itearator). İşlevin son parametresi tek parametreli bir sınayıcı (predicate). Eğer [first, last) aralığındaki herhangi bir öğe için sınayıcımız olan f, “true” değer üretirse işlevimiz “true” değer döndürecek. Eğer aralıktaki hiçbir değer için f, “true” değer üretmez ise işlevimiz “false” değerini döndürecek. Kısaca bu işlev ile [first, last) aralığında en az bir değerin verilen bir koşulu sağlayıp sağlamadığını sınayabiliyoruz:

Yukarıdaki kodda ivec vector‘ünde bulunan tamsayılar içinde en az bir asal sayı bulunup bulunmadığını test ediyoruz. Bu sınamayı pekala find_if algoritmasıyla da gerçekleştirebilirdik, değil mi?

find_if algoritması bir aralık içinde bir koşulu sağlayan ilk öğeyi arıyor ve koşulu sağlayan ilk öğenin konumunu döndürüyor. Eğer öğelerden hiçbiri ilgili koşulu sağlamıyor ise algoritmanın geri dönüş değeri kendisine geçilen last konumu.

any_of algoritmasını şu şekilde de kodlayabilirdik:

all_of algoritması ile bir aralıktaki tüm değerlerin bir koşulu sağlayıp sağlamadığını sınayabiliyoruz:

Aşağıdaki kod parçasına bakalım:

ls isimli listedeki tüm sayıların n tamsayısına tam olarak bölünüp bölünmediğini sınamak için all_of algoritmasının kullanıldığını görüyorsunuz. Bu örnekte sınayıcı parametresine bir lambda ifadesi geçiliyor. lambda ifadesinde yerel değişken olan n yakalanıyor (capture ediliyor).

all_of işlev şablonu şu şekilde kodlanabilir:

all_of algoritmasının başka bir gerçekleştirimi şöyle olabilirdi:
Bu arada find_if_not algoritmasının da C++11 ile geldiğini hatırlatalım. find_if_not algoritması ile bir aralıkta bulunan değerlerden bir koşulu sağlamayan ilk öğenin konumunu bulabiliyoruz:
Şimdi de none_of algoritmasını inceleyelim. none_of algoritması bir aralıktaki değerlerden hiçbirinin verilen bir koşulu gerçeklemiyor ise “true” değer döndürüyor:
Aşağıdaki main işlevini inceleyelim:
Yukarıdaki kodda svec içinde tutulan isimlerden hiçbirinin uzunluğu 6‘dan fazla değilse programın akışı if deyiminin içine girecek. none_of algoritması aşağıdaki gibi kodlanabilir:
none_of algoritmasının any_of algoritmasının lojik değili olduğu açık, değil mi?
Son olarak aşağıdaki programı derleyerek çalıştırın:

Necati Ergin

C ve Sistem Programcıları Derneğinde eğitmen olarak çalışıyor.

Bunlar da ilginizi çekebilir

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kod Eklemek İçin Okuyun