Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 범위 기반 for 루프

<시간/>

범위 기반 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 }