Как рассчитать среднее значение элементов в массиве без знака? - PullRequest
2 голосов
/ 10 февраля 2011

У меня быстрый вопрос, и я задаю вопрос, но я не смог ничего найти в Интернете.

Как рассчитать среднее значение элементов в массиве без знака?Или, более того, выполнять операции с неподписанным символом?

Ответы [ 3 ]

5 голосов
/ 10 февраля 2011

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 Only (с использованием лямбды)

#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

1 голос
/ 10 февраля 2011

Арифметические операции отлично работают на unsigned char, хотя вы можете иногда удивляться тому, что арифметика в C всегда повышается до int.

В C ++ Standard Library Library,

#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])).

1 голос
/ 10 февраля 2011

Примерно так же, как со всем остальным, вы складываете их и делите на количество.Чтобы избежать переполнения, вы, как правило, хотите преобразовать их во что-то большее, пока вы занимаетесь математикой.Если (как это обычно бывает) вы хотите получить результат с плавающей запятой, вы также захотите выполнить все вычисления с плавающей запятой.

...