Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision | ||
search_n [2008/12/12 22:12] ltrzaska |
search_n [2008/12/12 23:03] (aktualna) ltrzaska |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
- | ===== seach_n ==== | + | ===== Algorytm seach_n ==== |
- | ===== adjacent_find.cpp ===== | + | <code cpp> |
+ | 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 ); | ||
+ | </code> | ||
+ | |||
+ | 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. | ||
+ | <code cpp> | ||
+ | vector<string> 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<string> itResult = search_n(vecA.begin(), vecA.end(), 2, "Anakonda"); | ||
+ | </code> | ||
+ | |||
+ | == 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. | ||
+ | <code cpp> | ||
+ | //deklaracja binarnego predykatu | ||
+ | //zwraca TRUE gdy porownywane stringi maja ostatnia litere ta sama | ||
+ | template<class T> | ||
+ | struct string_equal_last : public binary_function <T, T, bool> { | ||
+ | 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<string>()); | ||
+ | </code> | ||
+ | |||
+ | ===== Źródło: adjacent_find.cpp ===== | ||
{{:search_n.ltrzaska.cpp|}} | {{:search_n.ltrzaska.cpp|}} |