범위기반 for 문
for (declaration : range) {
statement;
}
- declaration: 각 반복 단계에서 사용될 변수의 선언입니다. 이 변수는
range의 각 요소를 가리킵니다.
- range: 반복할 대상입니다. 이는 배열,
std::vector와 같은 컨테이너, 문자열, 이니셜라이저 리스트 등이 될 수 있습니다.
2차원 벡터 array의 각 요소를 행과 열의 형태로 출력하는 예제
#include <iostream>
#include <vector>
int main() {
std::vector<std::vector<int>> array = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
for (const auto& row : array) {
for (int elem : row) {
std::cout << elem << " ";
}
std::cout << std::endl;
}
return 0;
}
1 2 3 4
5 6 7 8
9 10 11 12
1. 첫번째 for 문
array는 2차원 벡터입니다. 즉, std::vector<std::vector<int>> 타입입니다.
const auto& row는 array의 각 요소를 가리킵니다. 여기서 auto는 자동 타입 추론을 사용하여 row의 타입을 const std::vector<int>&로 추론합니다.
const 키워드는 row를 상수로 선언하여 반복 과정에서 변경되지 않음을 보장합니다.
&는 참조자를 사용하여 실제 요소를 가리키도록 합니다. 이렇게 하면 불필요한 복사가 발생하지 않아 성능이 향상됩니다.
2. 두번째 for 문
row는 std::vector<int> 타입입니다.
int elem은 row의 각 요소를 가리킵니다. 여기서 int 타입은 벡터의 요소 타입입니다.
- 이 반복문은
row의 모든 요소를 순차적으로 접근합니다.
- 각 요소는
elem에 복사됩니다. (참조자가 아닌 복사이기 때문에 필요에 따라 const auto& elem로 변경하여 참조를 사용할 수도 있습니다.)