2015-03-02 12 views
-1

我想要一次總結12個數字(模擬一年)然後將結果添加到單獨的向量,但我似乎在掙扎。我曾試圖一次獲得12個數字,但我不確定。這是我正在閱讀的文本文件中的一個示例。使用累積從一個向量一次總結12個數字,然後將結果添加到另一個向量C++

+3

到底是什麼問題嗎? – Borgleader 2015-03-02 14:04:49

+0

如果你看['std :: accumulate'](http://en.cppreference.com/w/cpp/algorithm/accumulate)它需要一對迭代器作爲參數。而矢量迭代器是隨機訪問的,所以你可以很容易地做'myVector.begin()+ 12'獲得向量的第13個元素的迭代器。 – 2015-03-02 14:09:47

+0

@Borgleader如何從我的降雨量向量中一次添加12個元素,然後將結果添加到新的向量中。 – louiej15 2015-03-02 14:12:12

回答

0

您必須累積每年的值,這意味着您輸入矢量中的12個連續元素。
每次您點擊第12個元素時,您的累加器都有預期值。

double currentrain = 0; 
for(int i = 0; i < rainfall.size(); ++i) { 
    // accumulate rain this year 
    currentrain += rainfall[i]; 
    // i%12==11 on december 
    if((i%12)!=11) 
     continue; 
    // we have accounted each month in this year 
    sum.push_back(currentrain); 
    // reset the accumulator for next year 
    currentrain = 0; 
} 
+0

現在感謝你了!顯示結果時的快速問題,例如(int j = 0; j louiej15 2015-03-02 14:22:09

+0

@ louiej15你需要某種數據結構,所以不用存儲雙精度矢量,而是存儲結構向量。一個結構將持有{int年; int月;雙rainmm;}和另一個{int年;雙rainmm;}。我將剩下的給你,因爲它超出了原始問題的範圍(當我說struct我真的認爲是類時,這取決於你和本項目的範圍)。 – birdypme 2015-03-02 15:54:06

0

你可以使用std ::直接積累:

vector<double> result; 
for (auto it = begin(rainfall); it+12<=rainfall.end(); it+=12) 
    result.emplace_back(accumulate(it, it+12, 0)); 
+0

如果'it + 12'超出'std :: end(rainfall)',請小心。 – 2015-03-02 14:23:03

+0

@JoachimPileborg好吧,我編輯它只是簡單地跳過最後一個,如果不完整,現在更簡單了。 – tux3 2015-03-02 14:28:34

相關問題