Free Lines Arrow
본문 바로가기
Language/C++

[C++] lambda(람다)

by skahn1215 2021. 4. 6.
728x90
반응형

lambda

항상 공부하면서 제일 중요하게 생각하는 것이 

왜 쓰는가? 목적이다 목적없이 공부하면 남는게 없다고 생각한다.

 

여기서는 아이런게 람다구나 를 이해하기 위해 간단하게 설명하겠습니다.

이외에도 찾아 보면 더 많은 내용들이 있습니다.

C++ 에서 람다는 왜 쓰는가?

정의:

람다는 람다표현식, 람다함수, 이름없는 함수라고 표현하다

 

장점: 

1. Lamda는 함수포인터와 함수 객체의 장점만 가지고 있다.

2. 클래스를 따로 구현할 필요가 없다

3. 간단하게 함수를 만들어 구현 할 수 있다.

 

단점:

1. 디버깅이 힘들수 있다.

2. 함수 재사용성이 낮아 진다.

 

lambda의 구조

[] (int i) ->int {return 0;}
[]: capture 람다함수 안에서 사용할 외부 변수를 지정 할 수 있다.
capture의 종류: [], [변수], [=], [&]. [=,&] 
(): parameters 파라미터 값 정의
->int: returntype 리턴을 무엇으로 할것인가
{}: statement 구현부

 

1. Capture

[] 비워두면 아무 변수도 사용하지 않는다는 캡쳐 생략가능
[변수] 해당 변수만 사용하는 캡쳐 값 변경 할 수 없음
[=] 외부의 변수를 모두 사용하는 캡쳐 값 변경 할수 없음
[&] 외부의 변수를 참조형으로 사용하는 캡쳐 값 수정 가능
[=,&] 일부는 참조형으로 사용하는 캡쳐 참조형 값만 수정가능

2. Parameters

- 파라미터로 받을 값을 정의해 주는 부분

 

3. Return type

- 리턴할 타입

 

4. Statement

- 함수의 구현부

 

lambda간단한 예제

1. lamda를 사용하지 않는 경우

    - 코드 내용은 내림차순으로 정렬 하려는 예제이다.

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

// 함수를 구현해 줘야함.
bool comp(int lhs, int rhs) {
	if (lhs > rhs) {
		return true;
	} else {
		return false; 
	}
}

int main() {

	vector<int> number = {7,6,44,4,33,2,1,33};

	sort(number.begin(), number.end() , comp);

	for (int i = 0; i < number.size(); i++) {
		cout << number[i]<<" ";
	}

}

2. lamda를 사용한경우

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;


int main() {

	vector<int> number = {7,6,44,4,33,2,1,33};

	sort(number.begin(), number.end(), [](int lhs, int rhs) -> bool
		{
			if (lhs > rhs) {
				return true;
			} else {
				return false;
			}
		});

	for (int i = 0; i < number.size(); i++) {
		cout << number[i]<<" ";
	}

}
728x90
반응형

'Language > C++' 카테고리의 다른 글

[C++] Crypto++ 을 이용한 string 암호화 구현  (0) 2021.07.16
[C++] string contains  (0) 2021.06.12

댓글