Narzędzia użytkownika

Narzędzia witryny


search_n

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

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|}}
search_n.1229116374.txt.gz · ostatnio zmienione: 2008/12/12 22:12 przez ltrzaska