przejście do zawartości
zpr c++ quick reference
Narzędzia użytkownika
Zarejestruj się!
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Zarejestruj się!
Ostatnie zmiany
Menadżer multimediów
Indeks
Ślad:
count_count_if
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== 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 ===== <code cpp> #include<algorithm> </code> ===== Opis algorytmu count ===== === Deklaracja algorytmu count === <code cpp> 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; } </code> === 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 === <code cpp> 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) ; </code> ===== Opis algorytmu count_if ===== === Deklaracja algorytmu count_if === <code cpp> 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; } </code> === 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=== <code cpp> #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; } </code> --- //[[master.bartczak@gmail.com|Adam Bartczak 5TIZ]]//
count_count_if.1229015003.txt.gz
· ostatnio zmienione: 2008/12/11 18:03 przez
abartcza
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Do góry