Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
search_n [2008/12/12 22:53] ltrzaska |
search_n [2008/12/12 23:02] ltrzaska |
||
---|---|---|---|
Linia 6: | Linia 6: | ||
</code> | </code> | ||
- | Funkcja search_n() szuka num wystapien w zasiegu kontenera [start,end). | + | Funkcja search_n() szuka //num// wystapień w zasiegu kontenera [start,end). |
- | Jezeli zostanie znalezione num kopii danego elementu wystapujacych kolejno | + | Jeżeli zostanie znalezione num kopii danego elementu występujących kolejno |
w sekwencji, funkcja zwraca iterator na pierwszy znaleziony element. | w sekwencji, funkcja zwraca iterator na pierwszy znaleziony element. | ||
W przeciwnym wypadku zwraca iterator na end danej sekwencji. | W przeciwnym wypadku zwraca iterator na end danej sekwencji. | ||
- | Jezeli predykat binarny jest zadany, to zostaje uzyty do specyficznego | + | Jeżeli predykat binarny jest zadany, to zostaje użyty do specyficznego |
- | porownania elementow. | + | porównania elementow. |
- | ===== adjacent_find.cpp ===== | + | == Użycie standardowe search_n == |
+ | Znajdź dwa wystąpienia słowa w wektorze. Przykład: | ||
+ | <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|}} |