A. STL Algorithms
1. 람다식
a. 람다식이란?
🌟 익명 함수를 생성하는데 사용되는 간결한 문법
- 함수 객체를 만드는데 있어서 편의성과 가독성을 높여줌
- 함수나 함수 포인터가 필요한 곳에서 사용(우선순위 큐에서 predicate 넣어줄 때, 인벤토리 등 을 할때 사용)
- 주로 STL 알고리즘과 함께 사용되어 익명 함수를 표현하는 용도
- C++11부터 도입
b. 기본 구문
📘 문법
[capture list] (parameters) -> return_type {
// 함수 본문
}
- capture list: 람다식에서 사용되는 외부 변수를 캡처. 람다식 내부에서 외부 변수를 사용할 때, 이 변수들을 캡처해야 함
- parameters: 람다 함수의 매개변수. 람다식 내에서 사용될 수도 있고, 비워둘 수도 있음
- return_type: 반환 유형. 자동으로 추론되면 ->와 반환 유형을 생략할 수 있음
- {}: 함수 본문을 감싸는 중괄호
⏳ 예제
#include <iostream>
int main() {
// 간단한 람다식 예시
auto add = [](int a, int b) -> int { return a + b; };
std::cout << add(3, 4) << std::endl; // 출력: 7
// 외부 변수 캡처 예시
int x = 10;
auto func = [&x]() { std::cout << "x: " << x << std::endl; };
func(); // 출력: x: 10
// 매개변수를 사용하지 않는 람다식
auto hello = []() { std::cout << "Hello, Lambda!" << std::endl; };
hello(); // 출력: Hello, Lambda!
return 0;
}
c. Capture List
🌟 외부 변수를 람다식 내에서 사용할 때 그 변수들을 어떻게 캡처할지를 결정
- [ ]: 아무 변수도 캡처 X
- [var]: 특정 변수 var를 값으로 캡처 ex) [aaa]
- [&var]: 특정 변수 var를 레퍼런스로 캡처 ex) [&aaa]
- [=]: 모든 변수를 값으로 캡처
- [&]: 모든 변수를 레퍼런스로 캡처
- [var, var, ,,,, var] : 특정 변수들을 여러개 지정
만약 주소값이 없다면 문제가 됨 ➡ 유의해서 사용해야 함!!
복사할 때 모든게 복사되는게 아니라
주소를 복사한다는 것 자체가 어떻게 보면 참조값을 넘긴다는 거랑 똑같음
d. 캡처 모드
🌟 외부 변수가 람다식 내에서 어떻게 변경될지를 결정
- mutable: 람다식 내에서 캡처된 변수를 변경할 수 있도록 함
- constexpr: 람다식 내에서 constexpr 함수로 사용할 수 있도록 함 (희귀)
e. 캡처 초기화
캡처된 변수들은 초기화, 복사, 레퍼런스로 캡처될 수 있음
⏳ 예제
#include <iostream>
int main() {
int a = 5;
int b = 10;
auto func1 = [a, &b]() mutable {
// a는 값으로 캡처되어 읽기 전용
// b는 레퍼런스로 캡처되어 수정 가능
a = 100; // 에러: a는 값으로 캡처되어서 수정할 수 없음
b = 200; // 유효: b는 레퍼런스로 캡처되어서 수정 가능
};
auto func2 = [=, &b]() mutable {
// 모든 변수가 값으로 캡처되고 b만 레퍼런스로 캡처됨
a = 100; // 에러: a는 값으로 캡처되어서 수정할 수 없음
b = 200; // 유효: b는 레퍼런스로 캡처되어서 수정 가능
};
func1();
std::cout << "a after func1: " << a << std::endl; // 출력: 5
std::cout << "b after func1: " << b << std::endl; // 출력: 200
func2();
std::cout << "a after func2: " << a << std::endl; // 출력: 5
std::cout << "b after func2: " << b << std::endl; // 출력: 200
return 0;
}
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버 -
어디부터 시작할지 막막한 게임 프로그래밍 입문자를 위한 All-In-One 커리큘럼입니다. C++, 자료구조/알고리즘, STL, 게임 수학, Windows API, 게임 서버 입문으로 이어지는 알찬 커리큘럼으로 게임 프
www.inflearn.com
'프로그래밍 언어 > C++' 카테고리의 다른 글
[게임 프로그래머 입문 올인원] 모던 C++ : std::string (80강) (0) | 2024.03.30 |
---|---|
[게임 프로그래머 입문 올인원] STL Algorithms : 기본정렬 (78강) (0) | 2024.03.28 |
[게임 프로그래머 입문 올인원] STL Algorithms : 기본 알고리즘(76강) (0) | 2024.03.27 |
[게임 프로그래머 입문 올인원] C++11 (Modern C++) 2 : range-based for(69강) (0) | 2024.02.22 |
[게임 프로그래머 입문 올인원] C++11 (Modern C++) 1 : auto (68강) (0) | 2024.02.22 |