我有一个结构向量 - 说结构类似于:
struct foo {
int bar1;
int bar2;
}
现在我想更新向量的每个元素,并且更新乘以bar1
2。
这样做的天真方法是遍历向量的每个元素,但是有没有更好的方法来做到这一点,也许是通过使用带有 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; });
}