Answer the question
In order to leave comments, you need to log in
template functions. What are the benefits?
Good day!
Please advise which of the two functions is better to use?
in C style:
double GetAverage(double arr[], int numElems) {
double total = 0.0;
for(int h = 0; h < numElems; ++h)
total += arr[h] / numElems;
return total;
}
template <typename ForwardIterator>
double GetAverage(ForwardIterator begin, ForwardIterator end) {
return std::accumulate(begin, end, 0.0) / std::distance(begin, end);
}
Answer the question
In order to leave comments, you need to log in
but I'm confused by calling 2 additional functions in the template
accumulate
it and immediately thought of a bundle. And the first example had to get a grasp. In addition, it is also not optimal - after all, division can be taken out of the cycle.Если код функции должен работать с разными типами входных параметров, то имеет смысл использовать шаблоны.
Если только с одним типом, то нет.
Реализации функций не эквивалентны и будут возвращать разный результат, практически со 100% вероятностью.
В первом случае суммируется частное от значения и количества элементов, а во втором элементы сперва суммируются, а потом делятся на число элементов. В первом случае больше накопление погрешностей вычислений, больше операций деления, следовательно, меньшая точность вычислений и меньшая скорость работы.
Если в первом варианте деление вынести из цикла, то различие будет только в гибкости кода.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question