[C++] lambda
Sep 02, 22람다 식이란?
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);
};