2012-02-20 142 views
0

为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)和程序挂起。请帮忙。

+0

函数mean()是如何定义的?你的问题也可能在那里。您是否使用过调试器来闯入该程序并查看最终结果? – 2012-02-20 12:35:44

+0

这里是我的平均功能,并没有我从来没有使用过调试器,现在就开始了,顺便说一句,我用dev C++。 模板 类型名称ü:: VALUE_TYPE均值(U开始,U端){ 的typedef类型名称ü:: VALUE_TYPE res_type; res_type sum = res_type(); size_t count = 0; (U pos = begin; pos!= end; ++ pos) sum + = * pos; ++ count; } 返回总数/计数; } – 2012-02-20 12:41:15

+0

我已经将'mean()'的定义添加到问题中了,因为它更易于阅读。 (你也可以编辑你自己的问题,以防万一你不知道。) – 2012-02-20 12:48:23

回答

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()之内吗? (使用调试器或合适的调试输出找出。)

+0

感谢martin,我会花更多时间在上面,也许试验调试器。你可以提出关于IDE的任何建议吗?我使用dev C++,但它似乎过时 – 2012-02-20 12:49:45

+0

@AlterEgo:尝试在这里:http://stackoverflow.com/questions/89275/best-c-ide-or-editor-for-windows – 2012-02-20 12:52:50