|
Algoritmaların template bildirimleri |
C++11 ile gelen bu üç algoritma lambdalarla birlikte çok faydalı biçimlerde kullanılabilmektedir. Üç algoritma içinde şablondan üretilecek fonksiyonun ilk iki parametresi kontrol edilmesi gereken aralığa ilişkin başlangıç ve bitiş itearator değerleri, üçüncü parametre ise tek parametreli bir sınayıcı (
predicate) 'dir. Şimdi sırasıyla çalışma mantıklarını irdeleyelim:
Algorithm | any_of
std::any_of algoritmasıyla bir aralık (
range) içindeki değerlerden herhangi birinin bir koşulu sağlayıp sağlamadığını kontrol edilmektedir. std::any_of'un geri dönüş değeri bool türündendir.
Herhangi biri koşulu
sağlıyorsa "true" döner.
|
STL Test Algoritmalarından any_of örneği |
Yukarıdaki örnekte string türünden bir vector container elemanlarının içerisinden herhangi birinin "
Mukhtar" elemanına eşit olup olmadığı kontrol edilmiş ve bir tanesi koşulu sağladığı için
true dönmüştür. ikinci kontrolde ise herhangi bir üye'nin uzunluğu 11'den fazla mı kontrolü yapılmış ve koşul sağlandığı için
true geri dönmüştür.
Algorithm | all_of
std::all_of algoritması ile bir aralık (
range) içindeki tüm değerlerin bir koşulu sağlayıp sağlamadığını kontrol edilmektedir. std::all_of'un geri dönüş değeri bool türündendir.
Tamamı koşulu
sağlıyorsa "true" döner.
|
STL Test Algoritmalarından all_of örneği |
Yukarıdaki örnekte string türünden bir vector container elemanlarının hepsinin uzunluğu 6'dan büyük mü olup olmadığı kontrolü yapılmış ve hepsi koşulu sağladığı için
true dönmüştür. ikinci kontrolde ise hepsinin uzunluğu 11'den büyük mü olup olmadığı kontrolü yapılmış ve hepsi koşulu sağlamadığı için
false dönmüştür.
Algorithm | none_of
std::none_of algoritması bir aralık (range) içindeki tüm değerlerin verilen bir koşulu sağlamadığını kontrol etmektedir. std::none_of'un geri dönüş değeri bool türündendir. Tamamı koşulu sağlamıyorsa "true" döner. Bu noktada none_of algoritmasının all_of algoritmasının lojik değilidir demek yanlış olmaz.
|
STL Test Algoritmalarından none_of örneği |
Yukarıdaki örnekte string türünden bir vector container elemanlarının hepsinin "
Aydin" elemanına eşdeğer olup olmadığı kontrol edilmiş ve bir tane bile olmadığı için
true değer olmuştur.
Bir tane bile koşul sağlansaydı false değer dönecekti. ikinci kontrolde ise container elemanlarının hepsinin uzunluğu 7'den küçük olmadığı kontrolü yapılmış ve hiç bir container elemanının uzunluğu 7'den küçük olmadığı için koşul sağlandığı için
true geri dönmüştür.