2014-04-08 66 views
0

我想處理2個相關的容器,我想處理它們元素明智的彼此。C++ for_each處理兩個容器並行

簡單示例: 一個容器包含某種類型的總和,另一個等長的容器包含必須從該總和中減去的數字。

std::vector<int> s = {20,56,7,34,234,23,54}; 
std::vector<int> m = {1,3,5,2,3,5,6}; 

for(int i=0; i<s.size();++i){ 
    s[i] -= m[i]; 
} 

有沒有一種更優雅的方式來實現,例如,使用for_each?

+2

你可以爲「其他」向量設置一個'iterator'。但我真的不明白這一點,你發佈的代碼是好的(當然除了範圍檢查)。 – Biffen

+2

您的解決方案已經很優雅。 – tenfour

回答

6

如果你真的想用這個一個std算法,你可以去改變:

std::transform(begin(s),end(s),begin(m),begin(s),yourfunc); 

其中​​需要從S和M的元素,並返回所需的修改爲s(或任何其他容器你的選擇)。

auto yourfunc = [](int ms, int mm){return ms-mm;}; 
+1

謝謝我不知道變換。但你們都可能是對的,這可能根本不會增加可讀性。 btw:std :: minus可以用作yourfunc。 –