下面是我的数组:
std::array<int, 4> mark;下面是我的一个函数:
float getAverage() {
float sum = 0;
sum = std::accumulate(mark, mark + mark.size(), 0);
return sum /= mark.size();
}但我得到以下错误:
Invalid operands to binary expression ('std::array<int, markAmount>' and 'std::__1::array::size_type' (aka 'unsigned long'))这是可以理解的,因为mark和mark.size()有不同的类型,但我不知道如何用其他方式来实现它。我应该对他们的类型进行类型转换吗?但是为什么它不是自动生成的?array与&array[0]相似吗?因为这就是我对std::accumulate的需求。
发布于 2020-05-12 17:41:07
与内置的C样式数组不同,std::array不会自动衰减为指向其第一个元素的指针。使用std::begin和std::end获取迭代器(本例中为原始指针):
std::accumulate(std::begin(mark), std::end(mark), 0);或成员函数.begin()和.end()。
发布于 2020-05-12 17:41:31
std::accumulate(mark.begin(), mark.end(), 0);
您需要提供迭代器来开始和结束。
发布于 2020-05-12 17:41:59
std::array不是c数组(即它不会衰减为指针)。这是使用它的一个原因。std::array没有operator+(size_t),这就是这个错误试图告诉你的。如果你想从begin累加到end,那么使用begin()和end()。
https://stackoverflow.com/questions/61748415
复制相似问题