2

私は簡単に質問をしていますが、オンラインで何も見つけることができませんでした。

unsigned char配列の要素の平均を計算するには? または、それと同じように、unsigned char に対して操作を実行しますか?

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 のみ (ラムダを使用)

#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)。(0 はintここです。別の型を使用する方が適切な場合があります。)

STL を使用しない場合、これは単純にループで計算されます。

平均は、合計を長さで割ったものです ( sizeof(arr) / sizeof(arr[0]))。

于 2011-02-10T04:17:25.067 に答える