본문 바로가기

STUDY/이론 정리

[C++] 람다

728x90

람다

람다는 람다 표현식, 람다 함수, 익명 함수 등으로 불린다.

함수가 호출 되거나 함수에 인수로 전달되는 위치에서 익명 함수 개체(클로저)를 정의하는 편리한 방법

 

일반적으로 람다는 알고리즘 또는 비동기 함수에 전달되는 몇줄의 코드를 캡슐화하는데 사용 됨

 

 

모양

[캡처]  (매개변수)  {함수동작}  (호출인자);

예시 ) []( int a, int b ) { cout << " " << endl; } ( 30, 40 );

 

여기서 매개변수 선언 부분과 호출인자는 생략이 가능하다.

 

+ )  [] (int  a, int b) { return a +b };        > 함수를 만들기만 한것

      [] (int a, int b ) { return a +b } (10, 20);        > 함수를 만들고 호출한 것

 

 

[] 캡처

캡처는 람다 외부에 정의 되어 있는 변수나 상수를 람다 내부에서 사용하기 위해서 사용한다.

그냥 매개변수로 쓰면 되는거아님? 

모든 변수, 상수를 매개변수로 전달할 수도 없고, STL에서 사용할 때는 매개변수 제약이 있을 수 있다.

두가지 방식

= ,혹은 변수이름 - call by value : 복사로 캡쳐  ex ) [result] , [=]

& - call by reference : 참조로 캡쳐 ex ) [&], [&result]

아무 변수 없이 쓰면 전체 참조, 전체 복사

 

 

auto 를 통해 람다 함수를 변수에 받아 넣을수도 있다.

auto = func1 = [](int a, int b) { return a * b; }; 도 가능하다.

 

그래서 어디에 쓰면 좋은가

함수가 필요한데 많이 쓰이진 않고 애매 할때. 1회성 함수

ex ) sort( v.begin(), v.end(), [](int a, int b ) { return a > b; } );

 람다를 사용하여 기존 오름차순 정렬함수를 내림차순으로 정렬하게 해준다.

 

 

 

 

 

https://docs.microsoft.com/ko-kr/cpp/cpp/lambda-expressions-in-cpp?view=msvc-170 

 

C++ 람다 식

자세한 정보: C++의 람다 식

docs.microsoft.com

 

728x90