Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C/C++에서 Lambda 함수의 중요성

<시간/>

람다 함수 − Lambda are functions은 기본 프로그램 범위를 벗어나는 구현이 필요하지 않은 인라인 함수입니다.

Lambda 함수는 또한 저장할 변수에 의해 값으로 사용될 수 있습니다. Lambda는 함수(펑터라고 함)에서 호출할 수 있는 객체라고 할 수 있습니다. ).

컴파일러는 람다 함수의 정의를 만날 때마다 일반적으로 람다에 대한 사용자 지정 개체를 만듭니다.

람다 함수는 일반 함수보다 더 많은 기능을 가지고 있습니다. 예를 들어 사용된 변수를 캡처하는 캡처 방법이 있습니다. 그러나 캡처된 변수는 개체의 구성원으로 처리됩니다.

때때로 람다 함수는 자체 범위가 있고 일반 함수 내에서 매개변수로 전달될 수 있는 "함수 개체"라고도 합니다. Lambda 함수에는 고유한 수명이 있습니다.

[ ] - 캡처

( ) - 매개변수(선택사항)

- 반환값(선택)

{...} - 기능 본문.

람다의 구문

[ ]( int a) -> int { return a-1 ;};

캡처 – 캡처는 람다 함수가 특정 범위 또는 중첩 블록에서 사용 가능한 변수에 대한 액세스 권한을 부여하는 절입니다.

두 가지 방법을 사용하여 사용 가능한 변수의 값을 캡처할 수 있습니다.

  • 이름으로 개체 캡처 – 이름으로 개체를 캡처하면 람다 함수의 로컬 복사본이 만들어집니다.

다음 예를 통해 이 개념을 이해할 수 있습니다. -

int main(){
   set s;
   //Adding the elements to set
   int i=20;
   for_each(s.begin(),s.end(), [i](T& elem){
      cout<<elem.getVal()*i<<endl;
   }
}

위의 예에서 값은 람다 함수의 로컬 복사본을 생성하여 캡처됩니다.

  • 참조로 개체 캡처 – 참조로 개체를 캡처하면 람다 함수의 컨텍스트가 조작됩니다. 따라서 함수 개체 또는 람다 함수에 의해 캡처된 값이 변경될 수 있습니다.

다음 예를 통해 이를 이해할 수 있습니다 -

int main(){
   sets;
   //Adding elements to the set
   int result=0;
   for_each(s.begin(),s.end(), [&result](&T elem){ result+= elem.getVal();});
   cout<<result<<endl;
}

멤버 함수 내부의 람다

람다 함수는 일반 함수 내에서 매개변수로 사용될 수 있다는 것을 알고 있습니다. 예를 들어,

class func{
public:
   func(set<T>s): s1(s){}
   void func(){
      remove_if(s1.begin(),s1.end(), [this](int i) ->bool {return (i<level);});
   }
private:
   set<T>s1;
   int result;
};