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:28] abartcza |
count_count_if [2008/12/11 18:30] abartcza |
||
---|---|---|---|
Linia 168: | Linia 168: | ||
===== Przykładowy program wykorzystujący algorytmy count i count_if ===== | ===== Przykładowy program wykorzystujący algorytmy count i count_if ===== | ||
{{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]]// |