関数オブジェクトをその場で作るのがラムダ式(無名関数).当然,関数オブジェクトを使う関数に対して使う.
関数の名前の代わりに [] と記述する.下記のコードは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;
}

コメントをかく