微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 如何使用std :: accumulate和lambda来计算平均值?

我有一个数量的标准库容器,如果它们加在一起,它们可能会导致溢出.我们假装是这个容器:
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
T累加(InputIt first,InputIt last,T init,BinaryOperation op);取决于第三个参数类型:(T init),所以你必须放在那里:0.0得到结果为double.

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

原文地址:https://www.jb51.cc/c/114854.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐