범위 기반 for 루프 (Range-Based For Loop)
범위 기반 for 루프는 C++11에서 도입된 기능으로, 컨테이너나 배열의 모든 요소를 쉽게 반복할 수 있도록 합니다. 이는 코드의 가독성을 높이고, 반복문을 간결하게 작성할 수 있게 해줍니다.
범위 기반 for 루프의 기본 구조
범위 기반 for 루프의 기본 구조는 다음과 같습니다:
for (declaration : range) {
// 반복할 코드
}
- declaration: 반복 변수 선언
- range: 반복할 범위 (컨테이너, 배열, initializer_list 등)
범위 기반 for 루프 예제
다음 예제는 벡터의 요소를 출력하는 범위 기반 for 루프를 보여줍니다.
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 범위 기반 for 루프 사용
for (int x : vec) {
std::cout << x << " ";
}
std::cout << std::endl;
return 0;
}
이 예제에서 vec
벡터의 모든 요소가 범위 기반 for 루프를 통해 출력됩니다.
범위 기반 for 루프와 참조
범위 기반 for 루프에서 반복 변수를 참조로 선언하면, 요소를 수정할 수 있습니다.
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 범위 기반 for 루프와 참조 사용
for (int& x : vec) {
x *= 2;
}
for (int x : vec) {
std::cout << x << " ";
}
std::cout << std::endl;
return 0;
}
이 예제에서 vec
벡터의 모든 요소가 2배로 수정됩니다.
초기화 리스트 (Initializer List)
초기화 리스트는 객체를 초기화하는 데 사용되는 간결한 구문입니다. 초기화 리스트는 std::initializer_list
를 사용하여 함수 매개변수로 전달할 수 있습니다.
초기화 리스트의 기본 사용법
초기화 리스트를 사용하여 벡터를 초기화하는 예제를 살펴보겠습니다.
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
for (int x : vec) {
std::cout << x << " ";
}
std::cout << std::endl;
return 0;
}
이 예제에서 vec
벡터는 초기화 리스트를 사용하여 초기화됩니다.
초기화 리스트를 함수 매개변수로 사용
초기화 리스트를 함수 매개변수로 사용할 수 있습니다. 이를 통해 함수에 가변 인자를 전달할 수 있습니다.
#include <iostream>
#include <initializer_list>
void printList(std::initializer_list<int> list) {
for (int x : list) {
std::cout << x << " ";
}
std::cout << std::endl;
}
int main() {
printList({1, 2, 3, 4, 5});
printList({10, 20, 30});
return 0;
}
이 예제에서 printList
함수는 초기화 리스트를 매개변수로 받아 리스트의 모든 요소를 출력합니다.
클래스 초기화 리스트
클래스의 생성자에서 멤버 변수를 초기화할 때 초기화 리스트를 사용할 수 있습니다.
#include <iostream>
class MyClass {
private:
int a;
double b;
public:
MyClass(int x, double y) : a(x), b(y) {}
void display() {
std::cout << "a: " << a << ", b: " << b << std::endl;
}
};
int main() {
MyClass obj(10, 3.14);
obj.display();
return 0;
}
이 예제에서 MyClass
의 생성자는 초기화 리스트를 사용하여 a
와 b
멤버 변수를 초기화합니다.
실습 문제
문제 1: 범위 기반 for 루프를 사용하여 배열의 요소를 출력
범위 기반 for 루프를 사용하여 배열의 요소를 출력하는 프로그램을 작성하세요.
해설:
#include <iostream>
int main() {
int arr[] = {1, 2, 3, 4, 5};
// 범위 기반 for 루프 사용
for (int x : arr) {
std::cout << x << " ";
}
std::cout << std::endl;
return 0;
}
문제 2: 초기화 리스트를 사용하여 벡터를 초기화하고, 요소를 두 배로 만드는 프로그램 작성
초기화 리스트를 사용하여 벡터를 초기화하고, 범위 기반 for 루프를 사용하여 각 요소를 두 배로 만드는 프로그램을 작성하세요.
해설:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 범위 기반 for 루프와 참조 사용
for (int& x : vec) {
x *= 2;
}
for (int x : vec) {
std::cout << x << " ";
}
std::cout << std::endl;
return 0;
}
문제 3: 초기화 리스트를 매개변수로 받아 평균을 계산하는 함수 작성
초기화 리스트를 매개변수로 받아 리스트의 평균을 계산하는 함수를 작성하세요.
해설:
#include <iostream>
#include <initializer_list>
double calculateAverage(std::initializer_list<int> list) {
int sum = 0;
for (int x : list) {
sum += x;
}
return static_cast<double>(sum) / list.size();
}
int main() {
std::cout << "Average: " << calculateAverage({1, 2, 3, 4, 5}) << std::endl;
std::cout << "Average: " << calculateAverage({10, 20, 30, 40, 50}) << std::endl;
return 0;
}
이제 5일차의 학습을 마쳤습니다. 범위 기반 for 루프와 초기화 리스트에 대해 상세히 학습하고 실습 문제를 풀어보았습니다.
질문이나 피드백이 있으면 언제든지 댓글로 남겨 주세요. 내일은 "constexpr과 상수 표현식"에 대해 다루겠습니다.
'-----ETC----- > C++ 고급 프로그래밍과 응용 프로젝트 시리즈' 카테고리의 다른 글
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 7: R-값 참조와 이동 시멘틱 (0) | 2024.08.01 |
---|---|
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 8: 디자인 패턴 심화 - 싱글톤 패턴 (Singleton Pattern) (0) | 2024.08.01 |
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 6: constexpr과 상수 표현식 (0) | 2024.08.01 |
[C++ 고급 프로그래밍과 응용 프로젝트] Day 3: SFINAE와 개념 (0) | 2024.08.01 |
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 4: C++20의 개념과 모듈 (0) | 2024.08.01 |