2

私は構造体のベクトルを持っています-構造体が次のようなものだとします:

struct foo {
  int bar1;
  int bar2;
}

ここで、ベクトルの各要素を更新したいのですが、更新はbar12 倍になります。

これを行う単純な方法は、ベクトルの各要素を反復処理することですが、これを行うためのより良い方法はありますか?ライブラリ関数と c++11 ラムダ関数を使用することでしょうか?

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 に答える