Lamda
람다 표현식은 매우 자주 사용되며 유용하기에 필수로 알아 두어야 한다.
https://en.cppreference.com/w/cpp/language/lambda
일반적인 함수는 global space에 만들어 놓고 함수의 이름을 사용해서 호출한다.
lamda expression (람다표현식)
- 코드 안에서 이름이 없는 함수를 만들어서 사용하는 방법
- 익명의 함수 ( anonymous function), 함수 리터럴 (literal)
- 함수 반환타입과 이름을 제거하고 [ ] 를 표기해 사용한다.
#include <iostream>
void foo(int a)
{
std::cout << "foo A : " << a << std::endl;
}
int main()
{
foo(1); // 함수 ( 함수 인자 ) : 함수 호출
// ========== 람다표현식 =========
[](int a)
{
std::cout << "foo B : " << a << std::endl;
} (10) ;
}
람다 표현식 예제(1)
[ ] : lamda introducer 람다가 시작됨을 나타냄.
#include <iostream>
int add(int a, int b) { return a + b;}
int main()
{
int n1 = add(1, 2);
// 람다표현식 생성, 함수
[](int a, int b) { return a + b;};
int n2 = [](int a, int b) { return a + b;}(1,2); // 함수 호출
std::cout << n1 << ", " << n2 << std::endl;
}
람다 표현식 예제 (2)
람다 표현식 예제로 sort를 역순으로 해야하는 경우 별도의 함수가 필요하다.
기존에는 아래의 두번째 방식처럼 cmp 함수를 별도로 만들어 구현할 수 있으나 lamda를 활용하면 간단해진다.
반환값이 따라 역순으로 sort를 할 수 있게 하는 sort의 기본 문법에 람다 표현식을 간단하게 적용해 볼 수 있다.
#include <iostream>
#include <algorithm> // std::sort 사용시 필요
bool cmp( int a, int b) { return a > b;}
int main()
{
int x[10] = {1,3,5,7,9,2,4,6,8,10};
// 기본 적인 sort
std::cout << "======= SORT 1 ========" << std::endl;
std::sort(x, x+10); // 시작, 마지막 요소의 다음주소
for( auto n : x ) std::cout << n << ", ";
std::cout<<std::endl;
// sort 를 역순으로 하는 방법 (cmp를 정의해 사용)
std::cout << "======= SORT 2 with cmp ========" << std::endl;
std::sort(x, x+10, cmp);
for( auto n : x ) std::cout << n << ", ";
std::cout<<std::endl;
// lamda를 활용해서 sort를 역순으로 하는 방법
std::cout << "======= SORT 3 with Lamda ========" << std::endl;
std::sort(x, x+10,
[]( int a, int b) { return a > b;} );
for( auto n : x ) std::cout << n << ", ";
}
Lamda의 좀 더 복잡한 문법
'C++' 카테고리의 다른 글
[C++] reference 개념 (0) | 2021.08.13 |
---|---|
[C++] range-for, if init, if constexpr (0) | 2021.08.12 |
[C++] 함수 : constexpr function (0) | 2021.08.10 |
[C++] 함수 : 후위 반환 타입(suffix return, trailing return) (0) | 2021.08.10 |
[C++] 함수 삭제 (function delete) (0) | 2021.08.09 |
댓글