更新C ++向量中的所有元素

时间:2013-06-27 06:18:03

标签: c++ c++11 vector stl lambda

我有一个结构矢量 - 比如结构就像:

struct foo {
  int bar1;
  int bar2;
}

现在我想更新矢量的每个元素,更新将bar1乘以2.

这样做的天真方法是迭代向量的每个元素,但有没有更好的方法来实现这一点,可能是通过使用带有c ++ 11 lambda函数的库函数?

2 个答案:

答案 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; });
}