람다 함수

김민수·2025년 1월 8일

C++

목록 보기
17/68

람다 함수는 함수를 한 줄로 간단히 정의할 수 있는 문법이다. 코드가 간결해지고, 함수 포인터나 콜백을 작성할 때 유용하다.


1. 기본 문법

[캡처](매개변수) -> 반환형 { 함수 본문 };
  • [캡처] : 람다 함수가 외부 변수를 캡처(참조 또는 복사)하는 방식
  • (매개변수) : 함수의 입력값
  • -> 반환형 : 반환 타입(생략 가능), 생략하면 컴파일러가 반환값을 자동으로 추론함
  • { 함수 본문 } : 실행될 코드
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;
}


2. 캡처

캡처 방식의미
[=]외부 변수를 복사하여 사용
[&]외부 변수를 참조하여 사용
[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;
}


3. 활용 예시

짝수만 출력

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
profile
안녕하세요

0개의 댓글