1
我有結構的向量的所有元素 - 說的結構是這樣的:更新的C++矢量
struct foo {
int bar1;
int bar2;
}
現在我想更新我的向量的每個元素和更新乘以2 bar1
。
這樣做的天真的方法是遍歷向量的每個元素,但是有沒有更好的方法來做到這一點,也許通過使用庫函數與c + + 11 lambda函數?
我有結構的向量的所有元素 - 說的結構是這樣的:更新的C++矢量
struct foo {
int bar1;
int bar2;
}
現在我想更新我的向量的每個元素和更新乘以2 bar1
。
這樣做的天真的方法是遍歷向量的每個元素,但是有沒有更好的方法來做到這一點,也許通過使用庫函數與c + + 11 lambda函數?
您可以使用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;
#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; });
}
+1信令的範圍內,對循環幾乎全軍覆沒,唯一的'的std :: for_each'用途使用我可以理解後者在將'std :: bind'傳遞給其他函數時會很麻煩。 –