【发布时间】:2011-12-15 12:01:57
【问题描述】:
对于每个人在某处都有代码sn-p的东西,它一定是最常见的功能,但我实际上已经花了不少于1.5小时在SO以及其他C++网站上搜索它,但还没有找到解决方案。
我想使用函数计算double array[] 的平均值。我想将数组作为 reference 传递给函数。有数百万个示例在 main() 循环中计算平均值,但我正在寻找一个函数,我可以将其放入外部文件并在以后随时使用。
到目前为止,这是我的最新版本,编译错误:
double mean_array( double array[] )
{
int count = sizeof( array ) / sizeof( array[0] );
double sum = accumulate( array, array + count, 0 );
return ( double ) sum / count;
}
编译错误是:
错误 C3861:“累积”:未找到标识符
你能告诉我如何修复这个功能吗?那个编译错误是什么意思?
如果我使用std::accumulate(超过已定义的using namespace std),则会收到以下错误:
'accumulate' : is not a member of 'std'
'accumulate': identifier not found
为什么 'accumulate' 不是 'std' 的成员?
ps:我知道我可以使用 'sum += array[i]' 方式而不使用累积,但我想了解这里发生了什么以及如何使我的示例正常工作。
【问题讨论】:
-
我不确定,只是想知道,您是否添加了必要的包含文件?
-
小心:
accumulate( array, array + count, 0.0 );注意 0.0 - 您在代码 sn-p 中累积整数。 -
那么,如果我从 0.0 开始,效果好吗?我需要传递计数,还是可以从 sizeof 计算?
-
您不能使用
sizeof(array),因为数组的大小未知。在这种情况下,请参阅下面的@xanatos 答案以获得更好的方法。 -
顺便说一句,在这里使用 std::accumulate 很好。如果您的数组非常大,则可以将其与例如 __gnu_parallel::accumulate 简单地平行化。
标签: c++ arrays visual-studio-2010 stl std