[C++] lambda

Sep 02, 22

lambda-expressions-in-cpp


람다 식이란?

C++11 이상에서는 람다 식(종종 람다라고도 함)은 함수가 호출되거나 함수에 인수로 전달되는 위치에서 익명 함수 개체( 클로저)를 정의하는 편리한 방법입니다.
일반적으로 람다는 알고리즘 또는 비동기 함수에 전달되는 몇 줄의 코드를 캡슐화하는 데 사용됩니다.


구성

이미지

void abssort(float* x, unsigned n) {
    std::sort(x, x + n,
        // Lambda expression begins
        [](float a, float b) {
            return (std::abs(a) < std::abs(b));
        } // end of lambda expression
    );
}
  • capture 절 (C++ 사양의 람다 소개자 라고도 함)
  • 매개 변수 목록 선택적 (람다 선언자라고도 함)
  • 변경 가능한 사양 선택적
  • exception-specification 선택적
  • trailing-return-type 선택적
  • 람다 본문

캡처

[]안에 외부의 변수들을 전부 다 참조([&]) 혹은 복사([=])할지 여부 혹은 각각 지정함.


쉽게 사용

auto로 쉽게 생성해서 사용하면 유용하고 코드가 간단해진다.

#include <bits/stdc++.h>
using namespace std;
 
int main() {
	auto f=[&](int n){
		cout<<n<<"\n";
	};
	f(3);
	return 0;
}

재귀

람다 함수를 재귀호출을 하려면 함수를 auto로 생성하면 안되고 std::function으로 생성해야 한다.

하지만 느리다고 한다.

function< int (int)> fibonacci = [&](int n){
if ( n <= 0 ) return 0;
if ( n == 1 ) return 1;

    return fibonacci(n - 1) + fibonacci(n - 2);
};