首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用std::accumulate查找数组的总和

使用std::accumulate查找数组的总和
EN

Stack Overflow用户
提问于 2020-05-12 17:37:37
回答 3查看 396关注 0票数 0

下面是我的数组:

代码语言:javascript
复制
std::array<int, 4> mark;

下面是我的一个函数:

代码语言:javascript
复制
float getAverage() {
        float sum = 0;
        sum = std::accumulate(mark, mark + mark.size(), 0);
        return sum /= mark.size();
    }

但我得到以下错误:

代码语言:javascript
复制
Invalid operands to binary expression ('std::array<int, markAmount>' and 'std::__1::array::size_type' (aka 'unsigned long'))

这是可以理解的,因为markmark.size()有不同的类型,但我不知道如何用其他方式来实现它。我应该对他们的类型进行类型转换吗?但是为什么它不是自动生成的?array&array[0]相似吗?因为这就是我对std::accumulate的需求。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-12 17:41:07

与内置的C样式数组不同,std::array不会自动衰减为指向其第一个元素的指针。使用std::beginstd::end获取迭代器(本例中为原始指针):

代码语言:javascript
复制
std::accumulate(std::begin(mark), std::end(mark), 0);

或成员函数.begin().end()

票数 4
EN

Stack Overflow用户

发布于 2020-05-12 17:41:31

std::accumulate(mark.begin(), mark.end(), 0);

您需要提供迭代器来开始和结束。

票数 0
EN

Stack Overflow用户

发布于 2020-05-12 17:41:59

std::array不是c数组(即它不会衰减为指针)。这是使用它的一个原因。std::array没有operator+(size_t),这就是这个错误试图告诉你的。如果你想从begin累加到end,那么使用begin()end()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61748415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档