본문 바로가기
프로그래밍 언어/C++

[C++] Lambda expression 지역 변수 캡처

by 까망 하르방 2025. 1. 18.
반응형

람다표현식 지역 변수 캡처

capture local variable

 

 

점수 배열에서 70점 이상 filter 한다고 생각해보자.

#include <algorithm>

void foo(int n)
{
	if (n >= 70)
	{
		printf("%d ", n);
	}
}

int main()
{
	int score[] = { 90, 30, 60, 70, 20, 10 };

	std::for_each(score, score + 6, foo);
}

 

 

람다 표현식으로 간결하게 표현할 수 있다.

#include <algorithm>

int main()
{
	int score[] = { 90, 30, 60, 70, 20, 10 };

	std::for_each(score, score + 6,
		[](int n) { if (n >= 70) printf("%d ", n); });
}

 

 

📌 [C++] 람다 표현식 lambda expression

 

[C++] 람다 표현식 lambda expression

람다 표현식 lambda expression• C++11 도입 • 익명의 함수(객체) 생성 • 함수 주소가 필요한 위치에 함수 구현 자체 표기 • auto 변수에 함수처럼 사용 • 특정 상황에서 일반 함수

zoosso.tistory.com


Q) 기준 점수를 인자로 전달하고 싶다면?

 ex) 60점 이상, 50점 이상

 

 

A) 전역 변수 grade 두어서 조건 확인할 수 있다.

#include <algorithm>

int grade; // 전역 변수

void foo(int n)
{
	if (n >= grade)
	{
		printf("%d ", n);
	}
}

int main()
{
	int score[] = { 90, 30, 60, 70, 20, 10 };
	grade = 60;

	std::for_each(score, score + 6, foo);
}

 

 

A) 람다 표현식은 자신이 속한 영역의 지역변수에 접근할 수 있다.

 → "지역 변수 캡처 했다 (capture local variable)"고 표현

#include <algorithm>

int main()
{
	int score[] = { 90, 30, 60, 70, 20, 10 };
	int grade = 60;

	std::for_each(score, score + 6,
		[grade](int n) { if (n >= grade) printf("%d ", n); });
}
반응형

댓글