Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision | Next revision Both sides next revision | ||
count_count_if [2008/12/11 18:19] abartcza |
count_count_if [2008/12/11 18:28] abartcza |
||
---|---|---|---|
Linia 169: | Linia 169: | ||
{{count_count_if.cpp}} | {{count_count_if.cpp}} | ||
+ | <code cpp>/* | ||
+ | * Autor: Adam Bartczak, 5TIZ | ||
+ | * Temat: Biblioteka STL, Opis algorytmów : count count_if | ||
+ | * | ||
+ | * count count_if należą do algorytmów niemodyfikujących biblioteki STL | ||
+ | * | ||
+ | * Autor: Adam Bartczak, 5TIZ | ||
+ | * Temat: Biblioteka STL, Opis algorytmów : count count_if | ||
+ | * | ||
+ | * count count_if należą do algorytmów niemodyfikujących biblioteki STL | ||
+ | * | ||
+ | * template <class InputIterator, class T> | ||
+ | * ptrdiff_t count ( InputIterator first, InputIterator last, const T& value ); | ||
+ | * | ||
+ | * ptrdiff_t count_return = count(<element od którego zaczynamy wyszukiwanie>, | ||
+ | * <element na którym kończymy wyszukiwanie>, <warotść szukana>); | ||
+ | * | ||
+ | * Algorytm count oblicza liczę elementów w kontenerze z zakresu [first, last) które pasują do warotości value, | ||
+ | * następnie zwraca liczbę pasujących elementów. | ||
+ | * | ||
+ | * template <class InputIterator, class Predicate> | ||
+ | * ptrdiff_t count_if ( InputIterator first, InputIterator last, Predicate predict ); | ||
+ | * | ||
+ | * ptrdiff_t count_if_return = count_if(<element od którego zaczynamy wyszukiwanie>, | ||
+ | * <element na którym kończymy wyszukiwanie>, <predykat do spełnienia>); | ||
+ | * | ||
+ | * Algorytm count_if oblicza liczbę elementów w kontenerze z zakresu [first, last) spełniających predykat predict | ||
+ | * przekazany jako obiekt funkcyjny, następnie zwraca liczbę pasujących elementów. | ||
+ | * | ||
+ | * Przykład zastosowania algorytmów count oraz count_if oparty jest na wyszukiwaniu odpowiednich elementów | ||
+ | * (włąściwych imion) wśród kontenera zawierającego polskie imiona. | ||
+ | */ | ||
+ | |||
+ | #include <iostream> | ||
+ | #include <vector> | ||
+ | #include <string> | ||
+ | // biblioteka z algorytmami STL | ||
+ | #include <algorithm> | ||
+ | // biblioteka wykorzystywana do dzielenia napisów | ||
+ | #include <boost/tokenizer.hpp> | ||
+ | | ||
+ | using namespace std; | ||
+ | |||
+ | // funkcja wykrywająca polskie imiona kobiet | ||
+ | bool NameWoman(const string& str) { | ||
+ | return (str[str.size()-1] == 'a' || str[str.size()-1] == 'A'); | ||
+ | } | ||
+ | |||
+ | // funkcja wykrywająca polskie imiona mężczyzn | ||
+ | bool NameMan(const string& str) { | ||
+ | return (!NameWoman(str)); | ||
+ | } | ||
+ | |||
+ | // funkcja wykrywająca imiona składające się z więcej niż 5 liter | ||
+ | bool NameSize(const string& str) { | ||
+ | return (str.size() > 5); | ||
+ | } | ||
+ | |||
+ | int main() { | ||
+ | |||
+ | typedef vector<string> VectorString; | ||
+ | |||
+ | typedef VectorString::iterator VectorStringIt; | ||
+ | |||
+ | // wektor imion | ||
+ | VectorString vect; | ||
+ | |||
+ | // iteratory wskazujace na wektor imion vect | ||
+ | VectorStringIt start, end, it; | ||
+ | |||
+ | // zmienna zawierająca liczbę elementów pasująca do danego wzroca | ||
+ | ptrdiff_t result; | ||
+ | |||
+ | // przykladowy napis ktory jest wypelniony polskimi imionami, odzielony znakami | ||
+ | // które nie są literami alfabetu (separatorami). W imionach nie należy wstawiać | ||
+ | // polskich liter (ą,ę,ł...), zamiast ich stosować odpowiedniki (a,e,l...). | ||
+ | const string STRING_NAMES = "Adam Michal Bartek, Adam . Ania ,/ EwA"; | ||
+ | |||
+ | // przykladowy wzorzec imienia dla funkcji count | ||
+ | const string VALUE_COUNT = "Adam"; | ||
+ | |||
+ | // dzielenie napisu na poszczególne imiona, następnie przypisywanie każdego z nich do wektora imion vect | ||
+ | boost::tokenizer<> tok(STRING_NAMES); | ||
+ | for(boost::tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){ | ||
+ | vect.push_back(*beg); | ||
+ | } | ||
+ | | ||
+ | // przypisanie iteratorom start i end wartości początkowych | ||
+ | start = vect.begin(); | ||
+ | end = vect.end(); | ||
+ | | ||
+ | // liczba wystapien imienia zawartego w zmiennej VALUE_COUNT (zastosowanie algorymu count) | ||
+ | result = count(start, end, VALUE_COUNT) ; | ||
+ | |||
+ | cout << "Liczba wystapien imienia " << VALUE_COUNT << ": " << result << endl; | ||
+ | | ||
+ | // liczba imion żeńskich w wektorze imion vect (zastosowanie algorymu count_if) | ||
+ | result = count_if(start, end, NameWoman) ; | ||
+ | | ||
+ | cout << "Liczba Kobiet: " << result << endl; | ||
+ | | ||
+ | // liczba imion męskich w wektorze imion vect (zastosowanie algorymu count_if) | ||
+ | result = count_if(start, end, NameMan) ; | ||
+ | | ||
+ | cout << "Liczba Mezczyzn: " << result << endl; | ||
+ | | ||
+ | // liczba imion zawierające więcej niż 5 liter (zastosowanie algorymu count_if) | ||
+ | result = count_if(start, end, NameSize) ; | ||
+ | | ||
+ | cout << "Liczba slow o liczbie liter > 5: " << result << endl; | ||
+ | |||
+ | return 0; | ||
+ | } </code> | ||
--- //[[master.bartczak@gmail.com|Adam Bartczak 5TIZ]]// | --- //[[master.bartczak@gmail.com|Adam Bartczak 5TIZ]]// |