2012-02-20 141 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