저번 포스팅에서 언급했듯이 이번 포스팅에서는 C++11에서 새로 추가된 범위기반 for문을 다룰 것이다. 범위 기반 for문은 배열이나 list, vector등의 요소들을 쉽게 반복할 수 있는 방법을 제공한다.
예를들어 요소수가 10인 배열 a 를 선언 후 for 반복문에서 for(int i = 0; i <10; i++)를 이용하여 배열 요소 a[i]를 이용한 반복문을 만들 수 있으나 i의 범위를 잘못 지정하는 등의 실수로 인해 원치않는 결과를 얻을 가능성이 있다. 그러나 범위 기반 for문은 이런 가능성을 사전에 차단해주기도 하고 실제로 사용하기에도 더욱 편리하다.
범위 기반 for문의 문법은 다음과 같다.
for(type iterator : data) { statement }
iterator는 for문 안의 statement에서 사용하려는 data의 요소 이름이고 data는 array나 list, vector등의 데이터이다. 되도록이면 iterator의 데이터형을 data와 같게 선언하는 것이 좋다. 만약 데이터형이 다르다면 형변환이 발생한다.
더욱 구체적인 예를 통해 범위 기반 for문을 살펴보자.
#include <iostream> int main() { int ar[] = {1,2,3,4,5,6,7,8,9,10}; //1~10까지의 정수데이터 배열 for(int iter : ar) //ar을 iter에 할당 { std::cout<<iter<<std::endl; //배열요소 출력 } return 0; }
위의 for문 안에선 iter를 출력하고 있다. for문 선언부에서 int형 iter가 선언되었고 ar의 요소를 받아오는 것을 알 수 있다. 좀더 구체적으로 살펴보자면 첫번째 반복에선 ar의 첫번째 배열요소인 ar[0]이 iter에 할당되어 결과적으로 ar[0]이 출력된다. 그 다음으로 iter에 ar[1]이 할당되어 출력되는 식으로 마지막 요소인 ar[9]가 출력될 때까지, 즉 남아있는 배열요소가 없을 때 까지 반복되는 것이다.
반복에 사용할 배열이나 데이터의 크기가 수시로 바뀌는 상황에서 기존 for문은 반복에 쓸 변수 i의 조건을 항상 바꾸어야 한다. 하지만 범위 기반 for문은 자동으로 전체 배열의 요소 개수에 맞게 반복이 실행되기 때문에 따로 조건문이 필요 없다. 또한 참조를 이용하여 직접 배열요소를 변경하는것도 가능하다.