2

我有一个结构向量 - 说结构类似于:

struct foo {
  int bar1;
  int bar2;
}

现在我想更新向量的每个元素,并且更新乘以bar12。

这样做的天真方法是遍历向量的每个元素,但是有没有更好的方法来做到这一点,也许是通过使用带有 c++11 lambda 函数的库函数?

4

2 回答 2

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;
于 2013-06-27T06:21:09.523 回答
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; });
}
于 2013-06-27T06:22:40.767 回答