범위 기반 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
'CS > 코딩테스트(C++)' 카테고리의 다른 글
[C++] getline() 특정 문자가 들어올 때까지 입력 받기 (0) | 2024.12.12 |
---|---|
[C++] 시간복잡도 상수배 관련 최적화 요소들 (0) | 2024.11.20 |
[C++ STL] 이진 탐색과 순차 탐색의 시간복잡도 (0) | 2024.11.14 |
[C++ STL] sort와 stable_sort (0) | 2024.11.14 |
[C++] 큰 배열 선언 시 주의사항 (0) | 2024.11.14 |