のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

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で型を設定しています。

うまく使えば便利そうです。ループの中を少し変えたい時とか特に