2

我有一个快速,我假设问题,但我无法在网上找到任何东西。

如何计算无符号字符数组中元素的平均值?或者更像是对无符号字符执行操作?

4

3 回答 3

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;

在线演示:http ://www.ideone.com/IGfht

于 2011-02-10T05:20:23.197 回答
1

与其他任何事情一样,您将它们相加并除以计数。为避免溢出,您通常希望在进行数学运算时将它们转换为更大的值。如果(通常)您想要一个浮点结果,那么您也需要对浮点进行所有数学运算。

于 2011-02-10T04:11:23.507 回答
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). (int此处为 0。您可能会发现使用其他类型更合适。)

如果没有 STL,这可以通过循环轻松计算。

平均值是总和除以长度 ( sizeof(arr) / sizeof(arr[0]))。

于 2011-02-10T04:17:25.067 回答