Narzędzia użytkownika

Narzędzia witryny


count_count_if

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 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]]//
count_count_if.txt · ostatnio zmienione: 2008/12/12 00:03 przez abartcza