有没有比generate/accumulate更快的计算函数结果均值的方法?

Is there a faster way to calculate the mean value of function results than generate/accumulate?

这是关于计算函数的 return 个值的算术平均值。

要获取 N 函数调用的平均值,我想到了:

std::vector<double> results(N);
std::generate(results.begin(), results.end(), my_function(...));
double mean = std::accumulate(results.begin(), results.end(), 0.0) / N;

是否有 standard/modern C++ 方法可以更快地完成或省略中间向量? Boost也是一个选项。

您必须调用该函数 N 次,但您可以节省一些 space 即时计算:

double mean = 0;
for (int i = 0; i < N; ++i)
    mean += my_function(...);
mean /= N;

更新:可能 现代 使用 boost 的单线方法:

double mean = std::accumulate(
    boost::make_function_input_iterator(my_func, 0),
    boost::make_function_input_iterator(my_func, N), 0.0) / N;

range-v3:

auto mean = ranges::accumulate(
                    ranges::view::generate_n([]{ return my_function(...); }, N),
                    0.0) / N;