Narzędzia użytkownika

Narzędzia witryny


count_count_if

Algorytmy count count_if

Algorytmy count, count_if należą do algorytmów niemodyfikujących. Algorytmy służą do przeszukiwania pewnej liczby elementów z kontenera w celu znalezienia odpowiedniej wartości (count) lub spełnienia odpowiedniego predykatu (count_if).

Nagłówek dla algorytmów count i count_if

 #include<algorithm> 

Opis algorytmu count

Definicja algorytmu count

  template <class InputIterator, class T>
  ptrdiff_t count ( InputIterator first, InputIterator last, const T& value )
  {
     ptrdiff_t ret=0;
     while (first != last) if (*first++ == value) ++ret;
     return ret;
  }

Parametry algorytmu count

  • first - element kontenera od którego zaczynamy wyszukiwanie
  • last - element kontenera na którym kończymy wyszukiwanie
  • value - wartość szukana

Wartość zwracana algorytmu count

Liczba pasujących elementów w kontenerze do wartości szukanej value.

Działanie algorytmu count

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.

Przykład użycia algorytmu count

    typedef vector<string> VectorString;
 
    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
    // 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) ;

Opis algorytmu count_if

Definicja algorytmu count_if

  template <class InputIterator, class Predicate>
  ptrdiff_t count_if ( InputIterator first, InputIterator last, Predicate pred )
  {
     ptrdiff_t ret=0;
     while (first != last) if (pred(*first++)) ++ret;
     return ret;
  }

Parametry algorytmu count_if

  • first - element kontenera od którego zaczynamy wyszukiwanie
  • last - element kontenera na którym kończymy wyszukiwanie
  • pred - predykat do spełnienia

Wartość zwracana algorytmu count_if

Liczba elementów spełniających predykat pred.

Działanie algorytmu count_if

Algorytm count_if oblicza liczbę elementów w kontenerze z zakresu [first, last) spełniających predykat pred przekazany jako obiekt funkcyjny, następnie zwraca liczbę pasujących elementów.

Przykład użycia algorytmu count_if

 // 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() {
 
    // tutaj odpowiednie deklaracje ...
 
    // 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 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;	 
 }

Przykładowy program wykorzystujący algorytmy count i count_if

count_count_if.txt · ostatnio zmienione: 2008/12/12 00:03 przez abartcza