===== Algorytm seach_n ====
iterator search_n( iterator start, iterator end, size_t num, const TYPE& val );
iterator search_n( iterator start, iterator end, size_t num, const TYPE& val, BinPred p );
Funkcja search_n() szuka //num// wystapień w zasiegu kontenera [start,end).
Jeżeli zostanie znalezione num kopii danego elementu występujących kolejno
w sekwencji, funkcja zwraca iterator na pierwszy znaleziony element.
W przeciwnym wypadku zwraca iterator na end danej sekwencji.
Jeżeli predykat binarny jest zadany, to zostaje użyty do specyficznego
porównania elementow.
== Użycie standardowe search_n ==
Znajdź np. dwa wystąpienia słowa w kontenerze np. wektorze.
vector vecA;
vecA.push_back("Zebra");
vecA.push_back("Anakonda");
vecA.push_back("Anakonda");
vecA.push_back("Zyrafa");
//iterator wskazujacy na pierwszy element ze znalezionych w sekwencji
vector itResult = search_n(vecA.begin(), vecA.end(), 2, "Anakonda");
== Użycie search_n z predykatem binarnym ==
Chcemy zdefiniować własny sposób porównania wyszukiwanych n elementów. Dla przykładu za równe uznajmy elementy
których ostatnia litera jest taka sama.
//deklaracja binarnego predykatu
//zwraca TRUE gdy porownywane stringi maja ostatnia litere ta sama
template
struct string_equal_last : public binary_function {
bool operator()(const T& x, const T& y) {
if(typeid(T) != typeid(std::string)) //zabezpiecz przed uzyciem nie dla stringu
return false;
string::const_iterator ix = x.end();
string::const_iterator iy = y.end();
if(*--ix == *--iy) return true;
return false;
}
};
//wyszukanie 4 kolejnych elementów które mają taką samą ostatnią literę jaką ma "Anakonda"
itResult = search_n(vecA.begin(), vecA.end(), 4, "Anakonda", string_equal_last());
===== Źródło: adjacent_find.cpp =====
{{:search_n.ltrzaska.cpp|}}