람다함수란?

C++의 람다 함수간단한 익명 함수를 정의할 수 있는 방법으로, 코드의 간결성을 높이고 일회성 기능을 구현할 때 유용합니다.

쉽게 말해서 즉석에서 간단하게 만드는 함수를 말합니다. 따로 이름을 붙이지 않고 쓸수 있게 해주는 간단한 도구입니다.

 

기본구조

 

[capture](parameters) -> return_type {
    // 함수 본체
}

  • capture: 외부 변수를 캡처하여 함수 내부에서 사용
  • parameters: 함수의 매개변수 목록
  • return_type: 반환 타입 (생략 가능, 컴파일러가 추론)
  • function body: 람다 함수의 실행 코드

기본예제

#include <iostream>
using namespace std;

int main() {
    auto doubleNumber = [](int x) {
        return x * 2;  // x를 두 배로
    };

    cout << doubleNumber(5);  // 출력: 10
    return 0;
}

 

외부변수캡쳐

외부변수를 값으로 캡처하거나 참조로 캡처할 수 있습니다.

int x = 10;

auto addValue = [x]() {  // 값으로 캡처
    return x + 5;
};

auto addReference = [&x]() {  // 참조로 캡처
    return x + 5;
};

x = 20;  // x 값 변경

std::cout << "addValue: " << addValue() << std::endl;  // 15
std::cout << "addReference: " << addReference() << std::endl;  // 25

//즉 참조값으로 가져온건 변경값을 가져왔지만 복사값으로 가져온건 첫줄 그대로를 베껴왔기때문에 값이 다르다

  • 값으로 캡처: 캡처 시점의 값을 복사
  • 참조로 캡처: 캡처한 변수를 참조

STL과 같이 활용하기

 

std::vector<int> numbers = {5, 2, 8, 1, 4};

std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
    return a < b;  // 오름차순 정렬
});

for (int num : numbers) {
    std::cout << num << " ";  // 1 2 4 5 8
}