최재영의 개발 일지
GitHubLinkedIn

[C++]람다 표현식(Lambda Expression)

C++#cpp#algorithm#lambda1분 읽기

기본 문법

[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<>()); // 위와 동일(더 간단)

객체를 정렬한다면 람다를 사용해야 한다.

참고