我有一个快速,我假设问题,但我无法在网上找到任何东西。
如何计算无符号字符数组中元素的平均值?或者更像是对无符号字符执行操作?
C++03 和 C++0x:
#include <numeric>
int count = sizeof(arr)/sizeof(arr[0]);
int sum = std::accumulate<unsigned char*, int>(arr,arr + count,0);
double average = (double)sum/count;
在线演示:http ://www.ideone.com/2YXaT
仅限 C++0x(使用 lambda)
#include <algorithm>
int sum = 0;
std::for_each(arr,arr+count,[&](int n){ sum += n; });
double average = (double)sum/count;
与其他任何事情一样,您将它们相加并除以计数。为避免溢出,您通常希望在进行数学运算时将它们转换为更大的值。如果(通常)您想要一个浮点结果,那么您也需要对浮点进行所有数学运算。
算术运算可以很好地工作unsigned char
,尽管您可能偶尔会惊讶于 C 中的算术总是提升为int
.
在 C++ 的标准模板库中,
#include <numeric>
template<class InputIterator, class T>
T accumulate(InputIterator first, InputIterator last, T init);
要计算总和unsigned char arr[]
,您可以使用accumulate(arr, arr + sizeof(arr) / sizeof(arr[0]), 0)
. (int
此处为 0。您可能会发现使用其他类型更合适。)
如果没有 STL,这可以通过循环轻松计算。
平均值是总和除以长度 ( sizeof(arr) / sizeof(arr[0])
)。