На этом шаге мы приведем пример использования алгоритмов count() и count_if().
В данной программе демонстрируется использование алгоритмов count() и count_if(), необходимых для подсчета элементов контейнера.
//--------------------------------------------------------------------------- #include <vcl.h> #include <iostream> #include <vector> #include <algorithm> #include <cctype> #include <conio.h> //необходимо для getch() #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused using namespace std; std::string ToRus(const std::string &in) { char *buff = new char [in.length()+1]; CharToOem(in.c_str(),buff); std::string out(buff); delete [] buff; return out; } /* Это унарный предикат, который определяет, представляет ли данный символ гласный звук.*/ bool isvowel(char ch) { ch = tolower(ch); if(ch=='a' || ch=='e' || ch=='и' || ch=='о' || ch=='у' || ch=='ы' || ch=='я' || ch=='ё' || ch=='ю' || ch=='э') return true; } int main(int argc, char* argv[]) { char str[] = "Быть или не быть - вот в чем вопрос."; vector<char> v; unsigned int i; for(i=0; str[i]; i++) v.push_back(str[i]); cout<< ToRus("Последовательность: "); for(i=0; i<v.size(); i++) { char c[2]; c[0]=v[i];c[1]='\0'; CharToOem(c,c); cout << c; } cout << endl; int n; n = count(v.begin(), v.end(), 'м'); cout << n << ToRus(" символ м\n"); n = count_if(v.begin(), v.end(), isvowel); cout << n << ToRus(" символов представляют гласные звуки.\n"); getch(); return 0; } //---------------------------------------------------------------------------
Результаты выполнения этой программы представлены на рисунке 1.
Рис.1. Результат работы приложения
В заключение обратимся к телу цикла
for(i=0; i<v.size(); i++) { char c[2]; c[0]=v[i];c[1]='\0'; CharToOem(c,c); cout << c; }
На следующем шаге мы рассмотрим использование алгоритмов remove_copy() и replace_copy().