Шаг 18.
Библиотека STL.
Алгоритмы. Подсчет элементов

    На этом шаге мы приведем пример использования алгоритмов 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;
  }
который используется для вывода содержимого вектора. Здесь вектор выводится посимвольно. Однако, раз вектор состоит из букв кириллицы, то перед выводом нужно перевести их в "читабельный" вид. Для этого создается строка c[], состоящая из одного символа, которая затем обрабатывается функцией CharToOem(), после чего выводится на экран.

    На следующем шаге мы рассмотрим использование алгоритмов remove_copy() и replace_copy().




Предыдущий шаг Содержание Следующий шаг