我有一个结构矢量 - 比如结构就像:
struct foo {
int bar1;
int bar2;
}
现在我想更新矢量的每个元素,更新将bar1
乘以2.
这样做的天真方法是迭代向量的每个元素,但有没有更好的方法来实现这一点,可能是通过使用带有c ++ 11 lambda函数的库函数?
答案 0 :(得分:17)
您可以使用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;
答案 1 :(得分: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; });
}