범위 기반 for 루프는 C++11에서 도입된 기능으로, 컨테이너(예: std::vector, std::list, 배열 등)의 모든 요소를 순회하는 간결하고 안전한 방법을 제공합니다. 반복문을 작성할 때 코드의 가독성을 높이고 오류를 줄일 수 있습니다.
기본 문법
범위 기반 for 루프의 기본 문법은 다음과 같습니다
for (declaration : container) {
// 반복할 코드
}
- declaration: 각 요소를 받을 변수를 선언합니다.
- container: 순회할 대상(배열, 벡터 등)을 지정합니다.
예제
벡터 순회
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
std::cout << num << " "; // 각 요소를 출력
}
std::cout << std::endl;
return 0;
}
배열 순회
#include <iostream>
int main() {
int arr[] = {10, 20, 30, 40};
for (int num : arr) {
std::cout << num << " "; // 각 요소를 출력
}
std::cout << std::endl;
return 0;
}
참조 및 auto 키워드 활용
컨테이너의 요소를 수정하거나, 복사 없이 참조로 순회하고자 할 때, 참조(&)와 auto 키워드를 활용할 수 있습니다. 특히 auto 키워드는 요소의 타입을 명시할 필요가 없기 때문에 가독성과 유지보수성에서 유리합니다.
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
for (auto& num : numbers) {
num *= 2; // 각 요소를 두 배로 증가
}
for (const auto& num : numbers) {
std::cout << num << " "; // 변경된 요소 출력
}
std::cout << std::endl;
return 0;
}
전통적인 for 루프와의 비교
범위 기반 for 루프는 전통적인 인덱스 기반 for 루프에 비해 경계 조건을 따로 설정할 필요가 없어 더 간결하며, 인덱스를 실수로 잘못 사용하는 오류를 방지할 수 있습니다.
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// 전통적인 for 루프
for (size_t i = 0; i < numbers.size(); ++i) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
// 범위 기반 for 루프
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
[C언어] 반복문-for 반복문, while 반복문, do-while 반복문
[C언어] 반복문-for 반복문, while 반복문, do-while 반복문
C 언어에서 반복문은 특정 작업을 여러 번 반복하는 데 사용됩니다. C 언어에서 제공하는 대표적인 반복문은 for, while, 그리고 do-while이 있습니다. 각 반복문은 사용 목적과 방식이 다릅니다. 1. fo
jeagyoo2.tistory.com
C++20 Ranges와의 차이점
C++20에서는 ranges 라이브러리가 도입되어 더 유연한 순회가 가능합니다. ranges는 필터링이나 변환과 같은 처리가 포함된 순회를 쉽게 구현할 수 있게 합니다. 예를 들어, 짝수만 출력하는 코드는 다음과 같이 작성할 수 있습니다
#include <iostream>
#include <vector>
#include <ranges>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
for (int num : numbers | std::views::filter([](int n) { return n % 2 == 0; })) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
장점
- 가독성: 코드가 간결해지고, 반복 구조가 명확해집니다.
- 안전성: 경계 조건을 명시적으로 체크할 필요가 없고, 컨테이너의 크기에 맞춰 자동으로 반복합니다.
- 일관성: 다양한 컨테이너를 동일한 방식으로 순회할 수 있습니다.
주의사항
- 범위 기반 for 루프는 컨테이너의 요소가 복사 가능한 경우에만 사용할 수 있으며, const 객체는 수정할 수 없습니다.
- C++20부터는 ranges와 함께 더 복잡한 조건을 포함한 순회가 가능합니다.
범위 기반 for 루프는 C++에서 반복 작업을 간편하게 수행할 수 있는 중요한 도구로, 코드의 가독성과 안정성을 높이는 데 크게 기여합니다.
'C++' 카테고리의 다른 글
[C++] maybe_unused (2) | 2024.11.08 |
---|---|
[C++] noreturn함수 (1) | 2024.11.07 |
[C++] std 네임스페이스 (1) | 2024.11.05 |
[C++] this-> 접두사 (2) | 2024.11.04 |
[C++] 정규 이름 조회(qualified lookup) (1) | 2024.10.29 |