使用 std::accumulate 求数组之和

Mar*_*ian 0 c++

这是我的数组:

std::array<int, 4> mark;
Run Code Online (Sandbox Code Playgroud)

这是我有的一个功能:

float getAverage() {
        float sum = 0;
        sum = std::accumulate(mark, mark + mark.size(), 0);
        return sum /= mark.size();
    }
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

Invalid operands to binary expression ('std::array<int, markAmount>' and 'std::__1::array::size_type' (aka 'unsigned long'))
Run Code Online (Sandbox Code Playgroud)

这是可以理解的,因为markmark.size()有不同的类型,但我不明白如何以其他方式制作它。我应该转换他们的类型吗?但为什么它不自动生成呢?类似于?array&array[0]因为这就是我所需要的std::accumulate

jro*_*rok 5

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

std::accumulate(std::begin(mark), std::end(mark), 0);
Run Code Online (Sandbox Code Playgroud)

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