본문 바로가기
CS/코딩테스트(C++)

[C++] 범위 기반 for문 (feat. auto 선언 지정자)

by CDCP 2024. 11. 19.

범위 기반 for문이란?

  • c++ 11 이후에 추가된 반복문이다.
  • 배열과 같은 컨테이너에 사용하며, 내부 요소를 반복하기 적합하다.
  • 배열, vector, list, set, map 등의 컨테이너에 사용할 수 있다.

 

형식)

// element_declaration - 배열 요소와 같은 자료형이 아니면 형 변환 발생
for (element_declaration : array) // array : 컨테이너, element_declaration : 배열 요소를 복사할 변수
    statement; // statement : 내용

array의 배열 요소를 복사하여 element_declaration에 넣는다고 보면 된다.

element_declaration = array[i]; // i = 0, 1, 2, ...

 

 

사용 예제)

int arr[] =  { 0, 1, 2, 3, 5, 8 };
for (int number : arr)
{
	cout << number << " ";
}

범위 기반 for문 사용 시 배열 요소를 복사하기 때문에 많은 비용이 발생할 수 있다.

 

int arr[] =  { 0, 1, 2, 3, 5, 8 };
for (int &number : arr) // number → &number로 변경
{
	cout << number << " ";
}

배열 요소를 참조하여 반복할 경우 복사가 발생하지 않는다. 참조된 상태에서 number을 수정할 경우 배열 요소에 영향을 줄 수 있다.

함수 선언 시 매개변수로 배열이 들어오거나, 동적 배열에서는 배열의 크기를 알지 못하므로 컴파일 에러가 발생한다.


auto 키워드란?

  • c++ 11 이후부터 초기화 식에서 형식이 추론되는 자료형
  • 자료형 타입 추론에 사용하는 키워드다.
  • 자료형 대신 auto를 사용한다.
  • 함수 포인터로도 사용할 수 있다.
  • 함수의 매개변수로는 사용할 수 없다.
  • 구조체나 클래스 등의 멤버 변수로 사용할 수 없다.

 

사용 예제)

int arr[] =  { // 내용 };
for (int number : arr)
{
	// 내용
}

에서 int n; → auto n;로 바꿔주면 된다.

int arr[] =  { // 내용 };
for (auto number : arr)
{
	// 내용
}

 

참조형에도 사용할 수 있다.

for(auto &number : arr)
{
	// 내용
}

 

성능 상의 이유로 범위기반 for문은 참조를 이용하거나 const 참조를 사용하는 것이 좋다. (자료형 앞에 const 키워드 추가)

예) const auto ...


참고자료

https://boycoding.tistory.com/210

https://blog.naver.com/kyed203/220068115571

https://dydtjr1128.github.io/cpp/2019/06/04/Cpp-auto.html