Algorithm | find, find_if, find_if_not

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

Algoritmaların template bildirimleri

Algorithm | find

std::find çağrısı sırasında verilen ilk iki parametre aralık belirten iteratorler ve 3. parametre C++17 'ye kadar sabit bir değer biçimindedir.

Algorithm | find örneği
find algoritması 3. parametrede verilen değeri baz alarak başlangıç iteretöründe gösterilen değerle başlayarak karşılaştırma yapar ve eşitlik koşulu sağlandığında değerin iteratör karşılığı ile geri döner. Bulamazsa veri yapısının end() fonksiyonu karşılığı olan iteratör değeri ile geri döner. Yukarıdaki örnekte bir vectör dizisi içinde console'dan girilen değerin var olup olmadığını bulan ve kaç tane varsa ekrana yazan programdır.

Algorithm | find_if

std::find_if çağrısı sırasında verilen ilk iki parametre aralık belirten iteratorler ve 3. parametre C++17 'ye kadar Unary Predicate bir callable değer biçimindedir. find_if algoritması 3. parametrede verilen callable ifadenin başlangıç iteretöründe gösterilen değerle başlayarak işleme sokar ve callable true döndüğünde bulduğu değerin iteratörü ile geri döner. Bulamazsa veri yapısının end() fonksiyonu karşılığı olan iteratör değeri ile geri döner. Aşağıdaki örnekte vector içindeki çift sayılar bulunup ekrana basılmaktadır.

Algorithm | find_if örneği - 1
Yukarıdaki ve aşağıdaki örnekte callable olarak lambda 'lar kullanılmıştır. Aşağıdaki örnekte lambda bir değişken olarak tanımlanmış ve find_if 'e öyle geçirilmiştir.

Algorithm | find_if örneği - 2
Aşağıdaki örnekte ise callable olarak fonksiyon kullanılmıştır. Yukarıdaki ve aşağıdaki örnekte string ifade içerisindeki büyük harfleri bulup ekrana basmaktadır.

Algorithm | find_if örneği - 3

Algorithm | find_if_not

std::find_if_not C++11 ile gelen ve kabaca find_if'in tersi biçimde çalışan bir algoritmadır. find_if _not algoritması 3. parametrede verilen karşılaştırma işlemi yapan callable ile başlangıç iteretöründe gösterilen değerle başlayarak işlem yapar ve callable false döndüğünde değerin iterotörü ile geri döner. Şartı sağlayan bir ifade bulamazsa veri yapısının end() fonksiyonu karşılığı olan iteratör değeri ile geri döner.

Algorithm | find_not örneği

Yukarıdaki örnekte vektör dizisi içerisindeki tek sayılar ekrana basılmaktadır.