C & C++/C++

[C++] range based for, 범위 기반 for 반복문

우준세 2022. 1. 13. 14:21
728x90
반응형

 

이번 포스팅은 C++을 공부하면서 range based for 즉, 범위 기반 for문에 대해 정리한 것입니다.


1. C++ 범위 기반 for문 이란?

- 기존의 for문은 반복할 때 편리한 방법으로 사용하지만 C++에서는 범위 기반 for문(range-based for)이라는 새로운 반복문을 사용하여 더 간단하게 배열 등의 형식을 반복하는 방법을 제공합니다. 

 

- 사용법 

for(타입 원소(변수) : 배열(리스트))

배열(리스트)에서 타입 형태의 원소(변수)를 차례대로 가져오는 형식입니다.

 

- 예시 

#include <iostream>

int main() 
{
  int s[5] = {1, 2, 3, 4, 5};

  for(int x : s)
    std::cout << x << " ";
  std::cout<<std::endl;
}

 

- 결과

 

결과를 보시면 배열 s안의 요소들을 하나씩 꺼내서 반복된 것을 알 수 있습니다.

즉, 배열 s 안의 int형 변수를 출력하는 결과를 볼 수 있으며 

꼭 배열(리스트) 앞에 " : " (콜론)을 붙여줘야 합니다.

 

2. 범위 기반 for문과 참조(&) 

- 앞서 사용한 방법으로 for문을 사용한다면 각 배열 요소가 배열 s에 복사돼서 사용됩니다. 

이렇게 복사를 하여 반복하는 방법은 비용이 많이들 수 있습니다. 그렇기 때문에 참조를 사용하여 값이 복사되지 않게 하여 반복합니다. 

 

- 예시 

int main() 
{
  int arr[] = {1,2,3,4,5};
  for(int &n : arr)
    std::cout << n << " ";
}

 

- 결과

 

 

- 참조를 사용한다면 배열 arr안의 요소들의 값을 바꿀 수 있습니다. 

 

int main() 
{
  int arr[] = {1,2,3,4,5};
  for(int &n : arr)
  	n = 0;
  
  for(int &n : arr)
    std::cout << n << " ";
}

 

- 결과 

이러한 값 변경을 하지 못하게 하기 위해 const 선언을 하여 값을 읽는 것만 가능하게 할 수 있습니다.'

 

int main() 
{
  int arr[] = {1,2,3,4,5};
  
  for(const int &n : arr)
    std::cout << n << " ";
}

 

3. 기존 for문과 범위 기반 for문의 차이점

- 기존의 for문을 횟수를 기준으로 반복을 하지만

범위 기반 for문의 반복 횟수는 배열 요소의 개수에 맞춰 자동으로 반복 횟수가 결정됩니다.

 

- 범위 기반 for문을 사용했을 때는 index를 구분하기가 힘듭니다. 기존의 for문은 i로 index를 나타내는데 범위 기반 for문은 원소(변수)의 값만 존재하기 때문입니다. 

 

 

이상으로 C++의 범위 기반 for(range based) for문을 정리했습니다

질문이나 잘못된 점이 있다면 댓글로 남겨주세요!

 

다음 포스팅으로 찾아오겠습니다 :) 

728x90
반응형