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
Previous revision
count_count_if [2008/12/11 17:53]
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 )
-+  ​
-  ptrdiff_t ret=0; +     ​ptrdiff_t ret=0; 
-  while (first != last) if (*first++ == value) ++ret; +     ​while (first != last) if (*first++ == value) ++ret; 
-  return ret; +     ​return ret; 
-}+  }
 </​code>​ </​code>​
  
Linia 32: Linia 32:
 === Przykład użycia algorytmu count === === Przykład użycia algorytmu count ===
  
-<code cpp> ​#include <​iostream>​ +<code cpp> ​   ​typedef ​vector<​string> ​VectorString;​
- #​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;​ 
-  +    
- typedef VectorString::​iterator VectorStringIt;​ +    // wektor imion 
-  +    VectorString vect; 
- // wektor imion +    
- VectorString vect; +    // iteratory wskazujace na wektor imion vect 
-  +    VectorStringIt start, end; 
- // iteratory wskazujace na wektor imion vect +    
- VectorStringIt start, end, it+    // zmienna zawierająca liczbę elementów pasująca do danego wzroca 
-  +    ptrdiff_t result; 
- // 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ć  
- // przykladowy napis ktory jest wypelniony polskimi imionami, odzielony znakami +    // polskich liter (ą,ę,ł...), zamiast ich stosować odpowiedniki (a,e,l...). 
- // które nie są literami alfabetu (separatorami). W imionach nie należy wstawiać  +    const string STRING_NAMES = "Adam Michal Bartek, ​  Adam . Ania ,/ EwA";​ 
- // polskich liter (ą,​ę...). +    
- const ​std::string STRING_NAMES = "Adam Michal Bartek, ​  Adam . Ania ,/ EwA";​ +    // przykladowy wzorzec imienia dla funkcji count 
-  +    const string VALUE_COUNT = "​Adam";​
- // 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 +    ​// dzielenie napisu na poszczególne imiona, następnie przypisywanie każdego z nich do wektora imion vect 
- boost::​tokenizer<>​ tok(STRING_NAMES);​ +    boost::​tokenizer<>​ tok(STRING_NAMES);​ 
- for(boost::​tokenizer<>::​iterator beg=tok.begin();​ beg!=tok.end();​++beg){+    for(boost::​tokenizer<>::​iterator beg=tok.begin();​ beg!=tok.end();​++beg){
         vect.push_back(*beg);​         vect.push_back(*beg);​
     }     }
     ​     ​
     // przypisanie iteratorom start i end wartości początkowych     // przypisanie iteratorom start i end wartości początkowych
-    start = vect.begin();​ +    start = vect.begin(); ​ 
-    ​+
     end = vect.end();     end = vect.end();
     ​     ​
Linia 77: Linia 66:
     result = count(start,​ end, VALUE_COUNT) ;     result = count(start,​ end, VALUE_COUNT) ;
  
-    ​std::cout << "​Liczba wystapien imienia " << VALUE_COUNT << ": " << result << ​std::endl; +    cout << "​Liczba wystapien imienia " << VALUE_COUNT << ": " << result << endl; 
- +     
-    ​return 0; +    ​// liczba imion żeńskich w wektorze imion vect (zastosowanie algorymu count_if) 
- +    result = count_if(start,​ end, NameWoman) ​;
-}+
 </​code>​ </​code>​
  
 ===== 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 )
-+  ​
-  ptrdiff_t ret=0; +     ​ptrdiff_t ret=0; 
-  while (first != last) if (pred(*first++)) ++ret; +     ​while (first != last) if (pred(*first++)) ++ret; 
-  return ret; +     ​return ret; 
-}+  }
 </​code>​ </​code>​
  
Linia 110: Linia 98:
 === Przykład użycia algorytmu count_if=== === Przykład użycia algorytmu count_if===
  
-<code cpp> ​#include <​iostream>​ +<code cpp> // funkcja wykrywająca polskie imiona kobiet 
- #​include <​vector>​ + ​bool ​ NameWoman(const string& str) { 
- #​include <​string>​ +    return (str[str.size()-1] == '​a'​ || str[str.size()-1] == '​A'​);​
- // 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  // funkcja wykrywająca polskie imiona mężczyzn
- inline ​bool  NameMan(const ​std::string& str) { + ​bool ​ NameMan(const string& str) { 
- return (!NameWoman(str));​+    return (!NameWoman(str));​
  }  }
    
- // funkcja ​porównująca ilość liter w słowie + // funkcja ​wykrywająca imiona składające się z więcej niż 5 liter  
- inline ​bool  NameSize(const ​std::string& str) { + ​bool ​ NameSize(const string& str) { 
- return (str.size() > 5);+    return (str.size() > 5);
  }  }
-  + 
- int main() {+int main() {
   
- typedef std::​vector<​std::​string>​ VectorString;​ +    ​// tutaj odpowiednie deklaracje ... 
-  + 
- typedef VectorString::​iterator VectorStringIt;​ +    // przykladowy napis ktory jest wypelniony polskimi imionami, odzielony znakami 
-  +    // które nie są literami alfabetu (separatorami). W imionach nie należy wstawiać  
- // wektor imion +    // polskich liter (ą,ę,ł...), zamiast ich stosować odpowiedniki (a,e,l...). 
- VectorString vect; +    const string STRING_NAMES = "Adam Michal Bartek, ​  Adam . Ania ,/ EwA";​ 
-  +    
- // iteratory wskazujace na wektor imion vect +    // przykladowy wzorzec imienia dla funkcji count 
- VectorStringIt start, end, it; +    const string VALUE_COUNT = "​Adam";​
-  +
- // 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 +    ​// dzielenie napisu na poszczególne imiona, następnie przypisywanie każdego z nich do wektora imion vect 
- boost::​tokenizer<>​ tok(STRING_NAMES);​ +    boost::​tokenizer<>​ tok(STRING_NAMES);​ 
- for(boost::​tokenizer<>::​iterator beg=tok.begin();​ beg!=tok.end();​++beg){+    for(boost::​tokenizer<>::​iterator beg=tok.begin();​ beg!=tok.end();​++beg){
         vect.push_back(*beg);​         vect.push_back(*beg);​
     }     }
     ​     ​
     // przypisanie iteratorom start i end wartości początkowych     // przypisanie iteratorom start i end wartości początkowych
-    start = vect.begin();​ +    start = vect.begin(); ​ 
-    ​+
     end = vect.end();     end = vect.end();
-    ​ + 
-    // liczba imion żeńskich w wektorze imion (zastosowanie algorymu count_if)+    // liczba imion żeńskich w wektorze imion vect (zastosowanie algorymu count_if)
     result = count_if(start,​ end, NameWoman) ;     result = count_if(start,​ end, NameWoman) ;
     ​     ​
-    ​std::cout << "​Liczba Kobiet: " << result << ​std::endl;+    cout << "​Liczba Kobiet: " << result << endl;
     ​     ​
-    // liczba imion męskich w wektorze imion (zastosowanie algorymu count_if)+    // liczba imion męskich w wektorze imion vect (zastosowanie algorymu count_if)
     result = count_if(start,​ end, NameMan) ;     result = count_if(start,​ end, NameMan) ;
     ​     ​
-    ​std::cout << "​Liczba Mezczyzn: " << result << ​std::endl;+    cout << "​Liczba Mezczyzn: " << result << endl;
     ​     ​
     // liczba imion zawierające więcej niż 5 liter (zastosowanie algorymu count_if)     // liczba imion zawierające więcej niż 5 liter (zastosowanie algorymu count_if)
     result = count_if(start,​ end, NameSize) ;     result = count_if(start,​ end, NameSize) ;
     ​     ​
-    ​std::cout << "​Liczba slow o liczbie liter > 5: " << result << ​std::endl; +    cout << "​Liczba slow o liczbie liter > 5: " << result << endl;  
- +  
-    return 0;+    return 0;  
  }  }
  
 </​code>​ </​code>​
 +
 +===== Przykładowy program wykorzystujący algorytmy count i count_if =====
 +{{count_count_if2.cpp}}
  
  --- //​[[master.bartczak@gmail.com|Adam Bartczak 5TIZ]]//  --- //​[[master.bartczak@gmail.com|Adam Bartczak 5TIZ]]//
count_count_if.1229014395.txt.gz · ostatnio zmienione: 2008/12/11 17:53 przez abartcza