Narzędzia użytkownika

Narzędzia witryny


count_count_if

To jest stara wersja strony!


Algorytmy count count_if

Algorytmy count, count_if należą do algorytmów niemodyfikujących. Algorytmy służą do przeszukiwania 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

Deklaracja algorytmu count

 template <class InputIterator, class T>
 	ptrdiff_t count ( InputIterator first, InputIterator last, const T& value );

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

 #include <iostream>
 #include <vector>
 #include <string>
 // biblioteka z algorytmami STL
 #include <algorithm>
 // biblioteka wykorzystywana do dzielenia napisów
 #include <boost/tokenizer.hpp>
 
 int main() {
 
	typedef std::vector<std::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 (ą,ę...).
	const std::string STRING_NAMES = "Adam Michal Bartek,   Adam . Ania ,/ EwA";
 
	// przykladowy wzorzec imienia dla funkcji count
	const std::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) ;
 
    std::cout << "Liczba wystapien imienia " << VALUE_COUNT << ": " << result << std::endl;
 
    return 0;
 
}

Opis algorytmu count_if

Deklaracja algorytmu count_if

  template <class InputIterator, class Predicate>
 	 ptrdiff_t count_if ( InputIterator first, InputIterator last, Predicate pred );

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

 #include <iostream>
 #include <vector>
 #include <string>
 // biblioteka z algorytmami STL
 #include <algorithm>
 // biblioteka wykorzystywana do dzielenia napisów
 #include <boost/tokenizer.hpp>
 
 // funkcja wykrywająca polskie imiona kobiet
 inline bool  NameWoman(const std::string& str) {
	return (str[str.size()-1] == 'a' || str[str.size()-1] == 'A');
 }
 
 // funkcja wykrywająca polskie imiona mężczyzn
 inline bool  NameMan(const std::string& str) {
	return (!NameWoman(str));
 }
 
 // funkcja porównująca ilość liter w słowie
 inline bool  NameSize(const std::string& str) {
	return (str.size() > 5);
 }
 
 int main() {
 
	typedef std::vector<std::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 (ą,ę...).
	const std::string STRING_NAMES = "Adam Michal Bartek,   Adam . Ania ,/ EwA";
 
	// przykladowy wzorzec imienia dla funkcji count
	const std::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 (zastosowanie algorymu count_if)
    result = count_if(start, end, NameWoman) ;
 
    std::cout << "Liczba Kobiet: " << result << std::endl;
 
    // liczba imion męskich w wektorze imion (zastosowanie algorymu count_if)
    result = count_if(start, end, NameMan) ;
 
    std::cout << "Liczba Mezczyzn: " << result << std::endl;
 
    // liczba imion zawierające więcej niż 5 liter (zastosowanie algorymu count_if)
    result = count_if(start, end, NameSize) ;
 
    std::cout << "Liczba slow o liczbie liter > 5: " << result << std::endl;
 
    return 0;
 }

Adam Bartczak 5TIZ

count_count_if.1228817967.txt.gz · ostatnio zmienione: 2008/12/09 11:19 przez abartcza