2013-10-02 138 views
1

在我的代碼中,我正在處理一組度量(一個float的向量),其中每個元素都有兩個相關的不確定性(比如+上/下)。 比方說,我想傾倒在屏幕上這些數值,像矢量對或矢量對?

Loop over the vector of the measurements 
{ 
    cout << i-th central value << " +" << i-th up uncertainty << "/-" << i-th down uncertainty << end; 
} 

什麼是最有效的/優雅的方式來做到這一點?

1)使用一對矢量

vector<float> central; //central measurement 
pair<vector<float>, vector<float>> errors; //errors 
for(int i = 0; i < central.size ; i++) 
{ 
    cout << central.at(i) << " +" << errors.first.at(i) << "/-" << errors.second.at(i) << endl; 
} 

2)使用對載體的:

vector<float> central; //central measurement 
vector<pair<float,float>> errors; //errors 
for(int i = 0; i < central.size ; i++) 
{ 
    cout << central.at(i) << " +" << errors.at(i).first << "/-" << errors.at(i).second << endl; 
} 

3)兩個獨立的載體:

vector<float> central; //central measurement 
vector<float> errUp; //errors up 
vector<float> errDown; //errors down 
for(int i = 0; i < central.size ; i++) 
{ 
    cout << central.at(i) << " +" << errUp.at(i) << "/-" << errDown.at(i) << endl; 
} 
+1

使'struct'包含所有三個數據。 – andre

回答

6

此:

,其中每個單元有兩個相關的不確定性(比如+ /掉電)

對我說:您擁有一個包含三個元素的對象(值+上/下)。因此,我會創建該對象並將它們存儲在單個向量中。

使用多個向量存儲意味着你必須保持它們同步(添加到事務處理等)。這是最麻煩的,你將不得不封裝這些載體是安全的。

+0

您的建議(以及Kerrek's)將是理想的,問題是「中心」,不確定性在代碼的不同部分進行評估:有一個「測量」類,執行所有任務以獲得「中心」矢量和另一類評估不確定性的「系統不確定性」。特別是,我目前正在設計SystematicUncertainties類,因爲會有大約50個不同的不確定性來源(即〜50個潛在的「上下」向量),我想盡可能地實現它。 – Blackphoenix

2

怎麼樣矢量三元組?

#include <array> 
#include <vector> 

using Measurement = std::array<float, 3>; 

std::vector<Measurement> data; 
1

我會做一個類或稱爲測量單個責任的結構。你可能不需要兩個不確定性值。大多數情況下,無論符號如何,這都是相同的,這意味着一個不確定性值可能會很好。

struct Measurement 
{ 
    union 
    { 
    float values[3]; 
    struct { float value, uncertaintyUp, uncertaintyDown; }; 
    }; 
} 

使用聯合會給你想要的可讀性和[]運算符的靈活性。

main() 
{ 
    Measurement x; 
    x.value = 1.0f; 
    x.uncertaintyUp = 0.1f; 
    x.uncertaintyDown = -0.1f; 

    for(int i = 0; i < 3; i++) 
    { 
    cout << x.values[i] << " "; 
    } 
} 

從這裏可以很容易地使用測量結構向量。如果您可以使用一個容器來存儲數據,那麼它總是最好的。如果你仔細想一想,所有三個向量中的所有數據在計數和容量方面總是相同的,所以不需要額外的開銷;一個矢量節省時間。

+1

單一責任原則。爲一項特定工作創建一個特定班級是關鍵。 +1 –