Я пишу простую функцию, которая перебирает числа в контейнере и вычисляет некоторое суммирующее значение (в данном случае энтропию).
Я хочу написать его как можно более универсальным, чтобы он работалс разными контейнерами (vector
, set
, ...) для разных типов значений (double
, float
, ...), поэтому я делаю это:
template<class Iterator>
typename Iterator::value_type Entropy(Iterator begin, Iterator end) {
typedef typename Iterator::value_type Value;
Value result = Value(); // assignment needed?
for (Iterator it = begin; it != end; ++it) {
result -= *it * log(*it);
}
return result;
}
Меня интересует, как будет выглядеть этот код в соответствии со всеми лучшими практиками.Другими словами, как именно будет выглядеть STL-реализация этой маленькой функции?