c – 如何使用std :: accumulate和lambda来计算平均值?
发布时间:2020-12-16 05:22:15 所属栏目:百科 来源:网络整理
导读:我有一个大数量的标准库容器,如果它们加在一起,它们可能会导致溢出.我们假装是这个容器: std::vectorint v = {1,2,3,4,5,6,7,8,9,10}; 我想使用std :: accumulate来计算这个容器的平均值,但是我不能将所有的数字加在一起.我会用v [0] /v.size()v [1] /v.siz
我有一个大数量的标准库容器,如果它们加在一起,它们可能会导致溢出.我们假装是这个容器:
std::vector<int> v = {1,2,3,4,5,6,7,8,9,10}; 我想使用std :: accumulate来计算这个容器的平均值,但是我不能将所有的数字加在一起.我会用v [0] /v.size()v [1] /v.size()….计算它所以我设置: auto lambda = ...; std::cout << std::accumulate(v.begin(),v.end(),lambda) << std::endl; 这是我到目前为止所尝试过的,其中 – >表示输出: lambda = [&](int a,int b){return (a + b)/v.size();}; -> 1 lambda = [&](int a,int b){return a/v.size() + b/v.size();}; -> 1 lambda = [&](int a,int b){return a/v.size() + b;}; -> 10 如何产生正确的平均值,使输出为5? 解决方法
您不应该使用整数来存储结果:
返回类型传递给函数accumulate: #include <vector> #include <algorithm> #include <iostream> #include <numeric> using namespace std; std::vector<int> v = { 1,10 }; int main() { auto lambda = [&](double a,double b){return a + b / v.size(); }; std::cout << std::accumulate(v.begin(),0.0,lambda) << std::endl; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |