Seung's Learning Record

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

프로그래밍/C++

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

70_0ewd 2023. 11. 1. 14:57

c++ 11버전 이후로는 범위 기반 반복문을 사용할 수 있다.  범위 기반 반복문이란 시작과 끝점을 알려주지 않아도 알아서 처음부터 끝까지 순회를 해주는 반복문이다. 


사용법

for(int elem : arr){
    elem ++;
    cout << elem << " ";
}

for문과 유사한 형태로 for()를 통해 범위를 나타내고 {} 내부에 실행문을 작성하면 된다.
int : 반복문을 돌릴 배열, 벡터의 요소들과 동일한 데이터 타입을 작성해야 함
elem : 데이터를 가질 변수의 이름
arr :  반복문을 돌릴 배열 혹은 벡터

위의 범위 기반 반복문의 특징은 다음과 같다.

  • range based for문에는 index 정보가 존재하지 않는다.
    for문은 보통 변수 i를 통해 탐색하고자 하는 배열의 인덱스 정보를 표현한다. 하지만 범위기반 반복문은 변수 elem으로만 값을 표현 하기 때문에 index를 조절하는 것이 쉽지 않다.
  • 배열의 요소 변경이 불가하다.
    위에 작성된 범위 기반 반복문을 보면 변수 elem에 arr배열의 요소값이 순차적으로 복사됨을 알 수 있다. 이때 우리가 elem의 값을 바꾼다 한들 그건 복사된 값을 변경하는 것이되기 때문에 arr에는 어떤 변화도 생기지 않게된다.

그렇다면 아래의 코드는 어떨까??

for(int& elem : arr){
    elem ++;
    cout << elem << " ";
}

해당 코드는 &참조자를 사용하여 범위를 표현한 코드이다. 해당 레퍼런스를 사용할 경우, elem은 배열 인자의 복사값이 아닌 레퍼런스값을 가지게 된다. 이렇게 될 경우, 복사 비용이 들지 않고 배열의 원소에도 접근이 가능하게 된다. 
만일 배열의 원소에 직접적으로 접근을 하고싶지만, 변경은 원치 않는다면 const 연산자를 자료형 앞에 사용하면 된다.

'프로그래밍 > C++' 카테고리의 다른 글

[ C++ ] 배열과 vector  (0) 2023.10.31
[ C++ ] 정렬 함수 sort  (1) 2023.10.30
[ C++ ] 함수 (Function)  (0) 2023.10.29
[ C++ ] 조건문  (1) 2023.10.28
[ C++ ] 표준 입출력  (0) 2023.10.28