无法计算双端队列的标准偏差

时间:2012-02-20 12:26:35

标签: c++ math statistics deque

为C ++实践构建统计程序,我从文件中提取主题的年龄并将其存储在deque<int> ages中。但是,当我尝试获得标准偏差时,我遇到了错误:

template <class U> typename U::value_type mean(U begin,U end){
    typedef typename U::value_type res_type;
    res_type sum=res_type();
    size_t count=0;
    for(U pos=begin;pos!=end;++pos){
        sum+=*pos;
        ++count; 
    }
    return sum/count;
}

template <typename T>
double stan_dev(deque<T>&d){
    double dev_sum=0,dev,dev_sqr,st_dev;
    double mn=mean(d.begin(),d.end());
    for(int it=0;it<d.size();++it){
         T val=d[it];                               
         dev= val-mn;                                 
         dev_sqr = dev*dev;
         dev_sum+=dev_sqr;
         cout<<"\n Deviation at for age # "<<d[it]<<" is "<<dev;
         cout<<"\n Deviation squared for age # " <<d[it]<<" is "<<dev_sqr;
         cout<<"\n Summing up so far .. "<<dev_sum;

    }
    st_dev=sqrt((dev_sum/d.size()));
    return st_dev;
}

只需在此处提供相关部分cout << stan_dev(ages),程序就会挂起。请帮忙。

1 个答案:

答案 0 :(得分:0)

您确定问题出在stan_dev()而不是mean()吗?

使用mean()

的以下黑客攻击实现
template <typename T>
double mean(T begin, T end)
{
    double sum=0, count=0;
    while(begin!=end)
    {
        sum+=*begin++;
        count++;
    }

    return sum/count;
}

我的计划runs fine

修改:使用您的mean()版本,程序runs fine也适用于我。你怎么称呼这个?你确定挂起在stan_dev()之内吗? (使用调试器或合适的调试输出来查找。)