関数オブジェクトをその場で作るのがラムダ式(無名関数).当然,関数オブジェクトを使う関数に対して使う.
関数の名前の代わりに [] と記述する.下記のコードはVisual Studio 2010 で動作する.
例2 絶対値ソート
例3 ラムダ式を変数に入れる
autoを使えば簡単.というか複雑なテンプレート型を書いてられないからautoがでてきた.
例4 ローカル変数を使う [&]
関数の名前の代わりに [] と記述する.下記のコードはVisual Studio 2010 で動作する.
[](/*引数...*/) { /*実装*/ }
template<typename Ty> class PrintArray { public: void operator()(const Ty val) { std::cout << val << " "; } }; int data[5] = { 1, 2, 3, 4, 5 }; //通常の関数オブジェクト版 std::for_each(data, data+5, PrintArray<int>()); //ラムダ関数による置き換え std::for_each(data, data+5, [](const int val) { std::cout << val << " "; } ); std::cout << std::endl;
例2 絶対値ソート
int data[10] = { 0, -2, 4, -6, 8, 1, -3, 5, 7, -9 }; std::sort(data, data+10, [](const int x, const int y) { return std::abs(x) < std::abs(y); } ); std::for_each( data, data+10, [](const int x) { std::cout << x << " "; } ); std::cout << std::endl;
例3 ラムダ式を変数に入れる
autoを使えば簡単.というか複雑なテンプレート型を書いてられないからautoがでてきた.
auto PrintFunc = [](const int x) { std::cout << x << " "; }; std::for_each( data, data+10, PrintFunc);
例4 ローカル変数を使う [&]
std::vector<double> data = GetData(); //Some data std::ofstream ofs(_outPath); // File name to save if( ofs.is_open() ) { std::for_each( data.begin(), data.end(), [&ofs](double d) { ofs << std::setw(15) << d; } ); ofs << std::endl; }
コメントをかく