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:57] ltrzaska |
search_n [2008/12/12 23:02] ltrzaska |
||
---|---|---|---|
Linia 6: | Linia 6: | ||
</code> | </code> | ||
- | Funkcja search_n() szuka //Pochylenie//num wystapień w zasiegu kontenera [start,end). | + | Funkcja search_n() szuka //num// wystapień w zasiegu kontenera [start,end). |
Jeżeli zostanie znalezione num kopii danego elementu występujących 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. | ||
Linia 13: | Linia 13: | ||
porównania elementow. | porównania elementow. | ||
- | == Użycie standardowe == | + | == Użycie standardowe search_n == |
Znajdź dwa wystąpienia słowa w wektorze. Przykład: | Znajdź dwa wystąpienia słowa w wektorze. Przykład: | ||
<code cpp> | <code cpp> | ||
Linia 25: | Linia 25: | ||
vector<string> itResult = search_n(vecA.begin(), vecA.end(), 2, "Anakonda"); | vector<string> itResult = search_n(vecA.begin(), vecA.end(), 2, "Anakonda"); | ||
</code> | </code> | ||
- | ===== adjacent_find.cpp ===== | + | |
+ | == 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|}} |