我需要对使用标准迭代器定义的集合使用基本统计函数(如mean,variance,quantile)(例如,对于boost::multi_array
的子数组)。这些是在标准库中实现的还是提升?
即使有现成的实现,我在模板中发现了这个有趣的练习。因为这些方法没有任何与结果类型相同的参数,所以我尝试按如下方式定义它们:
template<class TIter>
TIter::value_type mean(TIter begin, TIter end)
{
int n = 1;
TIter::value_type result = *begin;
begin++;
while(begin!=end)
{
n++;
result+=*begin;
begin++;
}
return result/n;
}
但显然无法编译:
stats.h:17:1: error: need ‘typename’ before ‘TIter::value_type’ because ‘TIter’ is a dependent scope
定义这样一个函数的最佳方法是什么?