2013-06-27 91 views
1

我有結構的向量的所有元素 - 說的結構是這樣的:更新的C++矢量

struct foo { 
    int bar1; 
    int bar2; 
} 

現在我想更新我的向量的每個元素和更新乘以2 bar1

這樣做的天真的方法是遍歷向量的每個元素,但是有沒有更好的方法來做到這一點,也許通過使用庫函數與c + + 11 lambda函數?

回答

16

您可以使用std::for_each此:

#include <algorithm> 
#include <vector> 
... 
std::vector<foo> v; 
.... 
std::for_each(v.begin(), v.end(), [](foo& f) { f.bar1 *=2; }); 

無論是清晰的/不是一個簡單的循環簡單是另一回事。在這個簡單的例子,一個普通的一系列基於循環可能是更好的選擇:

for (auto& f : v) f.bar1 *= 2; 
+2

+1信令的範圍內,對循環幾乎全軍覆沒,唯一的'的std :: for_each'用途使用我可以理解後者在將'std :: bind'傳遞給其他函數時會很麻煩。 –

6
#include <algorithm> // for std::for_each 
#include <vector> 

void update_foos(std::vector<foo>& foos) 
{ 
    // Range-based for 
    for(auto& foo : foos) 
    { 
    foo.bar1 *= 2; 
    } 
    // std::for_each+lambda 
    std::for_each(std::begin(foos), std::end(foos), [](foo& f) { f.bar1 *=2; }); 
}