Range-based for Statement (C++)

Junhyeok Yun·2022년 11월 21일
0

C++

목록 보기
4/5
post-thumbnail

Today's Goal

원소의 처음부터 끝까지 간편하게 접근할 수 있는 Range-based for문에 대해 알아보자


Syntax

for ( for-ranged-declaration : expression )
     statement


Remarks

Range-based for문은 expression 의 처음부터 끝까지의 원소에 각각에 대해 순차적으로 접근하여 statement 를 실행하는 것이다.

for-ranged-declaration 부분에 선언된 변수는 for문의 로컬 변수이며 expression 이나 statement 에서 재선언될 수 없다. 주로 auto 키워드를 사용하여 선언하는데 자세한 사용 예시는 밑에서 알아보도록 하자.

expression 부분에는 크기가 미리 정해진 배열이나 vector, map 과 같은 범위가 begin()과 end()로 정의된 C++ standard library 컨테이너를 사용할 수 있다.

Visual Studio 2017 부터는 begin()end() 가 같은 타입의 값을 리턴하지 않아도 Range-base for문을 사용할 수 있다. 즉, end() 가 Ranges-V3 라이브러리에서 정의된 센티넬 객체 같은 것을 리턴할 수 있는 것이다.

(Ranges-V3는 C++14/17/20에서 사용되는 range 라이브러리로 C++20의 std::ranges를 기반으로 하며, Sentinel value는 보통 반복문이나 재귀 알고리즘에서 종료 여부를 나타내는 특별한 값을 말한다. 따라서 Sentinel value는 일반적으로 해당 알고리즘의 정상적인 데이터 값에서는 절대 등장할 수 없는 값으로 선택한다)


Examples

참고로 break, return, goto, continue 모두 일반 for문처럼 사용 가능하다.


Reference

포프TV - 내가 쓰는 C++11: Range-Based For
Microsoft Learn - Range-based for Statement (C++)
Wikipedia - Sentinel value
Carrot - while문에서 센티널sentinel 사용

profile
개발 공부 일지

0개의 댓글