[C++]람다 표현식(Lambda Expression)
기본 문법
[capture](parameters) -> return-type {
body
}
캡처 방식
| 코드 | 설명 |
|---|---|
[] | 아무것도 캡처하지 않음 |
[=] | 모든 외부 변수를 값으로 복사 |
[&] | 모든 외부 변수를 참조로 캡처 |
[x] | 변수 `x``만 값으로 복사 |
[&x] | 변수 `x``만 참조로 캡처 |
[x, &y] | x는 값으로, y는 참조로 캡처 |
[=, &x] | 모든 변수는 값으로 복사, x만 참조로 캡처 |
[&, x] | 모든 변수는 참조로 캡처, x만 값으로 복사 |
지금까지 알고리즘 문제를 풀면서 캡처를 할 일은 거의 없었던 것 같다.
활용 예시
1. 필터링
vector<int> v = { ... };
// C++17
v.erase(
remove_if(v.begin(), v.end(), [](int n) { return n % 2 != 0; }),
v.end()
);
// C++20
erase_if(v, [](int v) { return n % 2 != 0; });
2. 정렬
vector<int> v = { ... };
sort(v.begin(), v.end(), [](int a, int b) { return a > b; }); // 내림차순
sort(v.begin(), v.end(), greater<>()); // 위와 동일(더 간단)
객체를 정렬한다면 람다를 사용해야 한다.