c++ - 使用 std::accumulate 查找数组的总和
问题描述
这是我的数组:
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
。
解决方案
与内置的 C 样式数组不同,std::array
它不会自动衰减到指向其第一个元素的指针。使用std::begin
andstd::end
获取迭代器(在这种情况下为原始指针):
std::accumulate(std::begin(mark), std::end(mark), 0);
或成员函数.begin()
和.end()
。
推荐阅读
- java - 带有管理面板的图像和视频下载器应用程序以及 Android Studio 上的用户应用程序
- sql - 在 EF 6 中按两列选择 Min() 和其他列和 GroupBy
- jquery - 选择选项过滤无法正常工作
- performance - Spark“第一个”窗口功能比“最后一个”花费的时间长得多
- python - 如何根据边界框(3D)知道两个对象是否接触?
- scala - Scala 中没有定义的高阶方法中如何处理函数值?
- python - 在 Python 中使用 case when 语句
- go - 为什么不读取标头值?
- python - 使用 x11 时,有什么方法可以在不同的设备上显示 GUI?
- javascript - 从对象数组中的属性创建字符串文字联合