Różnice między wybraną wersją a wersją aktualną.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
count_count_if [2008/12/11 18:28] abartcza |
count_count_if [2008/12/12 00:03] (aktualna) abartcza |
||
|---|---|---|---|
| Linia 8: | Linia 8: | ||
| ===== Opis algorytmu count ===== | ===== Opis algorytmu count ===== | ||
| - | === Deklaracja algorytmu count === | + | === Definicja algorytmu count === |
| <code cpp> template <class InputIterator, class T> | <code cpp> template <class InputIterator, class T> | ||
| ptrdiff_t count ( InputIterator first, InputIterator last, const T& value ) | ptrdiff_t count ( InputIterator first, InputIterator last, const T& value ) | ||
| Linia 74: | Linia 74: | ||
| ===== Opis algorytmu count_if ===== | ===== Opis algorytmu count_if ===== | ||
| - | === Deklaracja algorytmu count_if === | + | === Definicja algorytmu count_if === |
| <code cpp> template <class InputIterator, class Predicate> | <code cpp> template <class InputIterator, class Predicate> | ||
| ptrdiff_t count_if ( InputIterator first, InputIterator last, Predicate pred ) | ptrdiff_t count_if ( InputIterator first, InputIterator last, Predicate pred ) | ||
| Linia 115: | Linia 115: | ||
| int main() { | int main() { | ||
| - | typedef vector<string> VectorString; | + | // tutaj odpowiednie deklaracje ... |
| - | + | ||
| - | typedef VectorString::iterator VectorStringIt; | + | |
| - | + | ||
| - | // wektor imion | + | |
| - | VectorString vect; | + | |
| - | + | ||
| - | // iteratory wskazujace na wektor imion vect | + | |
| - | VectorStringIt start, end; | + | |
| - | + | ||
| - | // zmienna zawierająca liczbę elementów pasująca do danego wzroca | + | |
| - | ptrdiff_t result; | + | |
| - | + | ||
| // przykladowy napis ktory jest wypelniony polskimi imionami, odzielony znakami | // przykladowy napis ktory jest wypelniony polskimi imionami, odzielony znakami | ||
| // które nie są literami alfabetu (separatorami). W imionach nie należy wstawiać | // które nie są literami alfabetu (separatorami). W imionach nie należy wstawiać | ||
| Linia 167: | Linia 156: | ||
| ===== 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_if2.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]]// | ||