我有一个快速的,我正在提出问题,但我无法在网上找到任何东西。
如何计算unsigned char数组中元素的平均值? 或者更喜欢它,对unsigned char执行操作?
答案 0 :(得分:5)
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;
答案 1 :(得分:1)
关于与其他任何东西一样,你将它们加起来并除以计数。为避免溢出,您通常希望在进行数学运算时将它们转换为更大的值。如果(通常)你想要一个浮点结果,你也想要对浮点进行所有数学运算。
答案 2 :(得分:1)
算术运算在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)
。 (0这里是int
。您可能会发现使用其他类型更合适。)
没有STL,这可以通过循环来计算。
平均值是总和除以长度(sizeof(arr) / sizeof(arr[0])
)。