본문 바로가기
  • 쓸쓸한 개발자의 공부방
C++

[C++] 함수 : Lamda expression (람다 표현식)

by 심찬 2021. 8. 11.

 

Lamda

 

람다 표현식은 매우 자주 사용되며 유용하기에 필수로 알아 두어야 한다.

 

https://en.cppreference.com/w/cpp/language/lambda

 

일반적인 함수는 global space에 만들어 놓고 함수의 이름을 사용해서 호출한다.

 

lamda expression (람다표현식)

 - 코드 안에서 이름이 없는 함수를 만들어서 사용하는 방법

 - 익명의 함수 ( anonymous function), 함수 리터럴 (literal)

 - 함수 반환타입과 이름을 제거하고 [ ] 를 표기해 사용한다.

#include <iostream>

void foo(int a)
{
    std::cout << "foo A : " << a << std::endl;
}

int main()
{
    foo(1);   // 함수  ( 함수 인자 ) : 함수 호출   
    
    
    // ========== 람다표현식 =========
    [](int a)
    {
        std::cout << "foo B : " << a << std::endl;
    } (10) ;
    
}

 

 

람다 표현식 예제(1)

 

[ ] : lamda introducer 람다가 시작됨을 나타냄.

#include <iostream>

int add(int a, int b) { return a + b;}

int main()
{
    int n1 = add(1, 2);
    
    // 람다표현식 생성, 함수
    [](int a, int b) { return a + b;};
    
    
    int n2 = [](int a, int b) { return a + b;}(1,2); // 함수 호출
    
    std::cout << n1 << ", " << n2 << std::endl;
}

 

 

람다 표현식 예제 (2)

람다 표현식 예제로 sort를 역순으로 해야하는 경우 별도의 함수가 필요하다.

기존에는 아래의 두번째 방식처럼 cmp 함수를 별도로 만들어 구현할 수 있으나 lamda를 활용하면 간단해진다.

반환값이 따라 역순으로 sort를 할 수 있게 하는 sort의 기본 문법에 람다 표현식을 간단하게 적용해 볼 수 있다.

#include <iostream>
#include <algorithm>   // std::sort 사용시 필요

bool cmp( int a, int b) { return a > b;}

int main()
{
    int x[10] = {1,3,5,7,9,2,4,6,8,10};
    
    // 기본 적인 sort 
    std::cout << "======= SORT 1 ========" << std::endl;
    std::sort(x, x+10); // 시작, 마지막 요소의 다음주소
    for( auto n : x ) std::cout << n << ", ";
    
    std::cout<<std::endl;
    
    // sort 를 역순으로 하는 방법 (cmp를 정의해 사용)
    std::cout << "======= SORT 2  with cmp ========" << std::endl;
    std::sort(x, x+10, cmp);
    for( auto n : x ) std::cout << n << ", ";
    
    std::cout<<std::endl;

    // lamda를 활용해서 sort를 역순으로 하는 방법
    std::cout << "======= SORT 3 with Lamda ========" << std::endl;
    std::sort(x, x+10, 
               []( int a, int b) { return a > b;} ); 
    for( auto n : x ) std::cout << n << ", ";
}

 

 

Lamda의 좀 더 복잡한 문법

댓글