람다 함수는 함수를 한 줄로 간단히 정의할 수 있는 문법이다. 코드가 간결해지고, 함수 포인터나 콜백을 작성할 때 유용하다.
[캡처](매개변수) -> 반환형 { 함수 본문 };
[캡처] : 람다 함수가 외부 변수를 캡처(참조 또는 복사)하는 방식(매개변수) : 함수의 입력값-> 반환형 : 반환 타입(생략 가능), 생략하면 컴파일러가 반환값을 자동으로 추론함{ 함수 본문 } : 실행될 코드int main() {
auto add = [](int a, int b) -> int {
return a + b;
};
std::cout << "5 + 3 = " << add(5, 3) << "\n"; // 출력: 5 + 3 = 8
return 0;
}
| 캡처 방식 | 의미 |
|---|---|
[=] | 외부 변수를 복사하여 사용 |
[&] | 외부 변수를 참조하여 사용 |
[x] | 특정 변수 x만 복사하여 사용 |
[&x] | 특정 변수 x만 참조하여 사용 |
[=, &x] 또는 [&, x] | 전체는 복사, 특정 변수만 참조 또는 그 반대 방식 |
int main() {
int a = 10;
int b = 20;
auto sum = [=]() { return a + b; }; // a와 b를 복사
auto multiply = [&]() { return a * b; }; // a와 b를 참조
std::cout << "합: " << sum() << "\n"; // 출력: 합: 30
std::cout << "곱: " << multiply() << "\n"; // 출력: 곱: 200
a = 15; // 참조 방식에만 영향을 미침
std::cout << "곱 (a 변경 후): " << multiply() << "\n"; // 출력: 곱 (a 변경 후): 300
return 0;
}
짝수만 출력
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::for_each(numbers.begin(), numbers.end(), [](int n) {
if (n % 2 == 0) {
std::cout << n << " ";
}
});
return 0;
}
출력:
2 4
내림차순 정렬
int main() {
std::vector<int> numbers = {5, 2, 8, 1, 3};
std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
return a > b;
});
for (int n : numbers) {
std::cout << n << " ";
}
return 0;
}
출력:
8 5 3 2 1