C++11 例題でわかるlambda
Sponsored Links
皆さんこんにちは
お元気ですか。私は元気です。
さて、今日はlambda式についてやろうと思います。
C++11ではlambda式が導入されました。無名関数、ラムダ式、クロージャとも呼ばれたりしていますが、何やら便利なようなのです。
さて、早速実行してみましょう。
ソースコード
#include <iostream> using namespace std; template<typename Function> void execFunction(Function &function){ function(); } int main(void){ //通常のHello World []{ cout << "Hello World" <<endl; }(); //functionとして保持+実行 auto function = []{ cout << "Hello World" <<endl; }; function(); //引数にラムダ式を渡す。 execFunction(function); //変数として実行 int a = 0; [&]{ a += 1;}(); cout << a << endl; //=を使うとスコープ内の変数そのままを利用できる。 [=]{ int b = a + a; cout << b << endl;}(); //引数を指定したラムダ式を実行できる [](int a,int b){cout << a + b << endl;}(1,2); cout << [](int a,int b)->int{return a + b;}(1,2) << endl; return 0; }
Result
Hello World Hello World Hello World 1 2 3 3
説明
//通常のHello World []{ cout << "Hello World" <<endl; }();
単純なHelloWorldを出力します。
auto function = []{ cout << "Hello World" <<endl; }; function();
変数にラムダ式を保存し、それを実行しています。
int a = 0; [&]{ a += 1;}(); cout << a << endl;
ローカル変数を使う方法です。&とするとどのローカル変数も利用することができます。
//引数を指定したラムダ式を実行できる [](int a,int b){cout << a + b << endl;}(1,2);
引数を実行するときは[]の後に(引数)を書きます。
cout << [](int a,int b)->int{return a + b;}(1,2) << endl;
戻り値を取る時です->intで型を設定しています。
うまく使えば便利そうです。ループの中を少し変えたい時とか特に