Сравнение
double average = CalculateAverage(values.begin(), values.end());
с
double average = std::for_each(values.begin(), values.end(), CalculateAverage());
В чем преимущества использования функтора над функцией? Не первый ли намного легче читать (еще до добавления добавления)?
Предположим, что функтор определяется следующим образом:
class CalculateAverage
{
private:
std::size_t num;
double sum;
public:
CalculateAverage() : num (0) , sum (0)
{
}
void operator () (double elem)
{
num++;
sum += elem;
}
operator double() const
{
return sum / num;
}
};