Алгоритмы STL. Алгоритм for_each (окончание)

   
На этом шаге мы рассмотрим еще один пример использования алгоритма for_each.

   
В третьем примере используется значение, возвращаемое алгоритмом for_each(). Особое свойство for_each() -
возвращение выполняемой операции - позволяет выполнить необходимые вычисления и вернуть результат в объекте
функции.

//---------------------------------------------------------------------------

#include <vcl.h>
#include "algostuff.hpp"

#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;
}


// Объект функции для вычисления среднего арифметического
class MeanValue {
  private:
    long num;    // Счетчик элементов
    long sum;    // Сумма всех значений элементов
  public:
    // Конструктор
    MeanValue () : num(0), sum(0) {
    }

    // "Вызов функции"
    // - обработка очередного элемента последовательности
    void operator() (int elem) {
        num++;          // Увеличение счетчика
        sum += elem;    // Прибавление значения
    }

    // Возвращение среднего арифметического
    // (с неявным преобразованием типа)
    operator double() {
        return static_cast<double>(sum) / static_cast<double>(num);
    }
};

int main()
{
  vector<int> coll;

  INSERT_ELEMENTS(coll,1,8);

  PRINT_ELEMENTS(coll,"Исходный вектор:\n");

  // Вычисление и вывод среднего арифметического
  double mv = for_each (coll.begin(), coll.end(),  // Интервал
                        MeanValue());              // Операция
  cout << ToRus("Среднее арифметическое: ") << mv << endl;


  getch();
  return 0;
}

//---------------------------------------------------------------------------

Текст этого примера можно взять здесь.

   
Программа выводит следующий результат:


Рис.1. Результат работы приложения

   
Со следующего шага мы начнем рассматривать немодифицирующие алгоритмы.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий