Хотя Джеймс прав, использование std::accumulate
с std::multiplies
будет более правильным, вероятно:
#include <iostream>
#include <functional>
#include <numeric>
#include <vector>
int main(void)
{
std::vector<double> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
double result = std::accumulate(vec.begin(), vec.end(),
1.0, std::multiplies<double>());
std::cout << "\nResult: " << result << std::endl;
}
С вашей for_each
версией вам больше не нужно копировать функтор, скорее:
double result = std::for_each(vec.begin(), vec.end(), multiply).result();
Или C ++ 0x, для развлечения:
double result = 1;
std::for_each(vec.begin(), vec.end(), [&](double pX){ result *= pX; });