C++에서 range-based for loop의 사용법은?
_____A1: range-based for loop는 C++11부터 도입된 반복문으로, 배열이나 컨테이너의 모든 요소를 간편하게 순회할 수 있게 해줍니다. 기존의 인덱스 기반 반복문보다 코드가 간결하고 읽기 쉽습니다.
---
Q2: 기본적인 range-based for loop 문법은 어떻게 되나요?
A2: 기본 문법은 다음과 같습니다.
```cpp
for (auto element : container) {
// element를 사용한 코드
}
```
`container`는 배열, 벡터 등 반복 가능한 객체이고, `element`는 해당 컨테이너의 각 요소를 순차적으로 받습니다.
---
Q3: 값을 복사하지 않고 참조로 받아오려면 어떻게 해야 하나요?
A3: 요소를 참조로 받아오려면 타입 앞에 `&`를 붙입니다.
```cpp
for (auto& element : container) {
// element는 컨테이너 내 요소의 참조
}
```
이렇게 하면 불필요한 복사를 방지하고, 요소를 수정할 수도 있습니다.
---
Q4: const 참조로 사용하면 어떤 장점이 있나요?
A4: 읽기 전용으로 참조하고 불필요한 복사를 방지하려면 다음과 같이 작성합니다.
```cpp
for (const auto& element : container) {
// element를 읽기만 할 경우 사용
}
```
이렇게 하면 요소가 불변이라는 것을 보장하고, 복사 비용을 줄입니다.
---
Q5: range-based for loop는 어떤 자료형에 쓸 수 있나요?
---
Q6: 범위 기반 for문에서 복합 선언이 가능한가요?
A6: 반복자 선언 방식과는 달리 범위 기반 for문에서 여러 변수를 동시에 선언하는 복합 선언은 지원하지 않습니다. 반복 변수는 하나의 변수만 선언해야 합니다.
---
Q7: 예외 처리는 어떻게 하나요?
A7: range-based for 자체에 예외 처리 기능은 없고, 내부 코드나 컨테이너의 요소 접근에서 예외가 발생할 수 있습니다. 필요하다면 반복문 내에서 `try-catch`를 사용할 수 있습니다.
---
Q8: C++17부터 변경된 점이나 주의할 점이 있나요?
A8: C++17부터 `if`와 `switch`문에 변수 선언 기능이 향상되었지만 range-based for 구문 자체는 크게 변화하지 않았습니다. 다만, C++17부터 `std::string_view` 등 새로운 타입과 결합해서 사용할 수 있습니다.
---
Q9: range-based for loop에서 요소를 건너뛰거나 조작하려면?
A9: `continue`, `break` 구문을 사용할 수 있으며, 인덱스 기반 접근이 필요하면 range-based for가 아닌 일반 for문을 사용해야 합니다.
---
Q10: 중첩된 range-based for문 예제는 어떻게 작성하나요?
A10: 2차원 배열이나 컨테이너 순회 시 중첩해서 사용할 수 있습니다.
```cpp
std::vector
for (const auto& row : matrix) {
for (int val : row) {
std::cout << val << " ";
}
std::cout << "\n";
}
```
---
이상입니다. range-based for loop는 코드 간결화와 안전한 반복 처리에 매우 유용한 기능입니다.
작성자:
김유리 [비회원]
| 작성일자: 1년 전
2024-09-20 17:11:33
조회수: 149 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 149 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.