Lan*_*521 -1 c++ math size containers standard-deviation
对于家庭作业,我必须创建一个可以在任何容器上执行的模板化标准偏差功能.这就是我所拥有的:
template <typename Container>
double findMean(Container c, int count){
double sum = 0;
for (auto&& e : c){
sum += e;
}
sum /= count;
return sum;
}
template <typename Container>
double findStDev(Container c){
double mean = findMean(c, c.size());
std::cout << mean << std::endl;
for (auto&& e : c){
e -= mean;
e *= e;
}
mean = sqrt(findMean(c, c.size()));
return mean;
}
Run Code Online (Sandbox Code Playgroud)
我第一次找到平均值时想要除以容器的整个大小(n),但是当我第二次找到标准偏差时,我需要除以size-1(n-1).
.size()函数是否可用于所有c ++容器?
几乎.根据表96 - N3797中的容器要求,标准库中的所有容器必须提供成员函数size.它应具有恒定的执行时间并返回distance(a.begin(),a.end())容器的值a.
但是,后面提到了一个(也是唯一一个)例外:
forward_list满足容器的所有要求(表96),但不提供size()成员函数.
(N3797 23.3.4.1第2条)
这意味着它std::forward_list确实是一个没有成员函数的标准容器size.