Algorithm | find_first_of, find_end, adjacent_find

C++'da bir veri yapısı içinde arama yapmak için kullanılabilecek std::find_first_of, std::find_end, std::adjacent_find algoritmalarını sırasıyla anlatmaya çalışalım.

Algorithm | find_first_of

find_first_of algoritmasının template bildirimi
std::find_first_of algoritması C++11 ile gelen bir algoritma ve çalışma prensibi bir veri yapısı içinde başka bir veri yapısının elemanlarını arama ve bulduğunda iteratör değeri ile geri dönme üzerinedir. find_first_of çağrısı sırasında verilen ilk iki parametre aranılan veri kümesine ilişkin aralık belirten iteratörler, sonraki iki parametre ise aranacak veri yapısına ilişkin başlangıç - bitiş iteratör değerleridir. Ve 5. parametre olarak Binary Predicate bir callable ifade de karşılaştırma için yazılabilmektedir.

Algorithm | find_first_of örneği - 1
Yukarıdaki örnek find_first_of algoritmasının temel kullanımına ilişkindir. v vektör container'ı içinde t container 'ında olan değerlerden herhangi biri bulunmaya çalışılır. Yukarıdaki örnekte hiçbir değer bulunamayacaktır. Aşağıdaki örnek ise string sınıfı içindeki find_first_of algoritmasının kullanımına ilişkindir. string sınıfı içindeki find_first_of çağrısı sırasında verilen string parametre içindeki değerlerden herhangi birinin bulunmasına ilişkin arama yapılmasını ve bulduğunda ilgili değere ilişkin iteratör değeri ile geri dönülmesini sağlamaktadır.

Algorithm | find_first_of örneği - 2
Yukarıdaki örnekte str string'i içerisinde O, U, T değerlerinden herhangi birinin str içinde geçtiği yerleri bulan ve bunları küçük harflerle değiştirmektedir.

Algorithm | find_first_of örneği - 3
Yukarıdaki örnekte 5. parametre olarak Binary Predicate bir callable olarak lambda ifade tanımlanmış ve 2, 3, 4 'den herhangi birine tam olarak bölünebilen ilk sayı bulunmuştur.

Algorithm | find_end

find_end algoritmasının template bildirimi
std::find_end algoritmasının çalışma prensibi bir veri yapısı içinde başka bir veri yapısının elemanlarını bütünsel ve ardışıl olarak arama ve bulduğunda ilk elemanın iteratör değeri ile geri dönmesi üzerinedir. find_end çağrısı sırasında verilen ilk iki parametre aranılan veri kümesine ilişkin aralık belirten iteratörler, sonraki iki parametre ise aranacak veri yapısına ilişkin başlangıç - bitiş iteratör değerleridir.

Algorithm | find_end örneği - 1
Yukarıdaki örnekte 2, 3, 4 'ün ardışıl olarak sıralandığı son yer alan 8 indeks değerini ekrana basacaktır. Aşağıdaki örnek ise . ifadesinin string içinde son geçtiği yerin bulunmasını sağlamaktadır.

Algorithm | find_end örneği - 2

Algorithm | adjacent_find

adjacent_find algoritmasının template bildirimi
adjacent 'in kelime anlamı bitişik'tir. Ve std::adjacent_find algoritmasının çalışma prensibi de tam olarak buna karşılık gelmektedir. Yani bir veri yapısı içinde elemanlarını ardışıl olarak tekrar edip etmediğine bakmakta ve tekrar eden ilk değeri bulduğunda elemanın iteratör değeri ile geri dönmektedir. adjacent_find çağrısı sırasında verilen ilk iki parametre kontrolü yapılan veri yapısına ilişkin aralık belirten iteratör değerleridir. 3. parametre ise yazılmazsa varsayılan karşılaştırma; binary predicate callable bir ifade yazılmışsa ona havale edilmektedir.

Algorithm | adjacent_find örneği - 1
Yukarıdaki örnekte string içerisinde tekrar eden harfler listelenmektedir. Aşağıdaki örnekte ise benzer işlem 3. parametrede Binary Predicate bir lambda ifade üzerinden sağlanmaktadır.

Algorithm | adjacent_find örneği - 2