私は構造体のベクトルを持っています-構造体が次のようなものだとします:
struct foo {
int bar1;
int bar2;
}
ここで、ベクトルの各要素を更新したいのですが、更新はbar1
2 倍になります。
これを行う単純な方法は、ベクトルの各要素を反復処理することですが、これを行うためのより良い方法はありますか?ライブラリ関数と c++11 ラムダ関数を使用することでしょうか?
これに使用できます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; });
}