728x90
반응형
C++11부터 도입된 람다 표현식은 익명 함수(anonymous function)를 정의하는 데 사용되며, 코드의 간결성과 가독성을 높여줍니다. 특히, 함수 객체나 함수 포인터를 대체하여 콜백 함수나 일회성 함수 정의에 유용하게 활용됩니다.
람다 표현식의 기본 문법은 다음과 같습니다:
cpp
[capture](parameters) -> return_type {
// 함수 본문
}
capture
: 람다 함수가 외부 범위에서 변수를 캡처하는 방법을 지정합니다.parameters
: 함수의 매개변수를 정의합니다.return_type
: 함수의 반환 타입을 명시합니다. (생략 가능){}
: 함수의 본문을 정의합니다.
예를 들어, 두 정수의 합을 계산하는 람다 표현식은 다음과 같이 작성할 수 있습니다:
cpp
auto add = [](int a, int b) -> int {
return a + b;
};
이제 add
를 호출하여 두 수의 합을 구할 수 있습니다:
cpp
int result = add(3, 4); // result는 7이 됩니다.
람다 표현식은 특히 표준 라이브러리의 알고리즘과 함께 사용될 때 강력한 도구가 됩니다. 예를 들어, std::for_each
와 함께 사용하여 벡터의 모든 요소를 출력할 수 있습니다:
cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::for_each(numbers.begin(), numbers.end(), [](int n) {
std::cout << n << " ";
});
// 출력: 1 2 3 4 5
return 0;
}
람다 표현식은 외부 범위의 변수를 캡처하여 사용할 수 있습니다. 캡처 방식에는 값에 의한 캡처와 참조에 의한 캡처가 있습니다:
- 값에 의한 캡처:
[=]
또는[변수명]
을 사용하여 외부 변수를 복사합니다. - 참조에 의한 캡처:
[&]
또는[&변수명]
을 사용하여 외부 변수에 대한 참조를 가져옵니다.
예를 들어, 외부 변수 factor
를 참조하여 벡터의 모든 요소를 해당 값으로 곱하는 람다 표현식은 다음과 같습니다:
cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
int factor = 2;
std::for_each(numbers.begin(), numbers.end(), [&factor](int& n) {
n *= factor;
});
for (int n : numbers) {
std::cout << n << " ";
}
// 출력: 2 4 6 8 10
return 0;
}
이처럼 람다 표현식을 활용하면 코드의 가독성과 유지보수성을 높일 수 있으며, 특히 콜백 함수나 일회성 함수 정의에 매우 유용합니다.
cpp
#include <cstdio>
#include <iostream>
int main(int agrc, char* argv[])
{
// closure object using lambda function
[](){ printf("hello, lambda. %d\n", __LINE__); }() ;
[]{ printf("hello, lambda. %d\n", __LINE__); }() ;
int i = 5;
[](int &v){ v += 10; }(i);
std::cout << i << std::endl;
return 0;
}
728x90
반응형
'C C++' 카테고리의 다른 글
gcc(g++)에서 지원하는 C++ STL version 확인하기 (0) | 2018.08.20 |
---|---|
xlnt (5) msys2 에서 xlnt 빌드 하기 (0) | 2018.03.28 |
Gammaray binary for Qt 5.10/MingW(32bit) (0) | 2018.01.15 |
GammaRay : Qt를 위한 Spy++ (0) | 2018.01.10 |
Xlnt (4) 값 쓰기 예제 (0) | 2017.10.15 |