범위 기반 for 루프는 C++ 11 표준에 추가되었으며 이에 상응하는 기존의 보다 간결한 형태입니다. 범위 기반 for 루프는 컨테이너의 요소를 처음부터 끝까지 반복하는 데 사용됩니다. 범위 기반 for 루프의 구문은 다음과 같습니다 -
구문
for( range-declaration : range-expression ) loop statement
범위 선언 - range-expression의 요소 유형과 동일한 유형의 변수 선언입니다. 종종 auto 키워드는 range-expression에서 요소 유형을 자동으로 식별하는 데 사용됩니다.
범위 표현식 - 일련의 요소를 나타내는 데 사용되는 모든 표현. 또한 중괄호 안에 요소의 순서를 사용할 수 있습니다.
루프문 - range-expression이 끝날 때까지 반복적으로 실행될 하나 이상의 명령문이 포함된 for 루프의 본문입니다.
기존 for 루프와의 비교 -
// Iterating over array int arr[] = { 10,20,30,40,50 }; for (int num : arr) printf("%d, ",num); Is same as: for ( int i=0;i<5;i++ ) printf("%d, ",arr[i]);
여기에서 rangebasedfor 루프에서 배열의 크기를 계산할 필요가 없으므로 조건식이 필요하지 않다는 것을 쉽게 알 수 있습니다. 또한 증가 또는 감소 연산이 필요하지 않습니다. 각 반복에 대해 위의 for 루프를 기반으로 하는 범위의 num은 처음부터 끝까지 배열 arr[]의 요소 값을 취합니다. 점프 문 중 하나가 실행될 때까지 요소를 건너뛰지 않습니다.
중단 - 나머지 모든 반복에 대한 루프를 종료합니다.
계속 - 현재 반복을 건너뛰고 다음으로 이동
이동 − 루프에서 빠져 나와 문 뒤에 레이블이 붙습니다. −
범위 기반의 장점
-
사용하기 쉽고 구문이 간단합니다.
-
컨테이너의 요소 수 또는 범위 표현식의 크기를 계산할 필요가 없습니다.
-
range-declaration의 데이터 유형을 모르는 경우 자동 지정자를 대신 사용할 수 있습니다. 그러면 자동으로 range-expression의 유형과 호환됩니다.
-
조건문이나 증가/감소 문이 필요하지 않습니다.
-
전체 컨테이너가 한 번에 반복되어야 하는 경우에 가장 좋습니다.
범위 기반의 단점
-
begin()과 end() 사이의 모든 요소를 반복합니다. 특정 인덱스는 처리할 수 없습니다.
-
범위 기반 for 루프를 사용하여 하나 이상의 요소를 다시 방문하고 요소 그룹을 건너뛸 수 없습니다.
-
배열은 역순으로 반복될 수 없습니다.
라이브러리가 사용됩니다
예시
#include <iostream> #include <vector> #include <map> int main(){ int arr[] = { 10,20,30,40,50 }; // traditional for for ( int i=0;i<5;i++ ) printf("%d, ",arr[i]); printf("\n"); for (int num : arr) printf("%d, ",num); printf("\n"); // for character array char str[] = "Hello World"; for (char c : str) printf("%c ",c); printf("\n"); for (char c : "Hello World") printf("%c ",c); printf("\n"); std::map <int, char> MAP({{1, 'A'}, {2, 'B'}, {3, 'C'}}); for (auto m : MAP) printf("{ %d, %c }", m.first,m.second); }
출력
10, 20, 30, 40, 50, 10, 20, 30, 40, 50, H e l l o W o r l d H e l l o W o r l d { 1, A }{ 2, B }{ 3, C }