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 |
댓글