본문 바로가기
-----ETC-----/C++ 고급 프로그래밍과 응용 프로젝트 시리즈

[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 5: 범위 기반 for 루프와 초기화 리스트

by cogito21_cpp 2024. 8. 1.
반응형

범위 기반 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의 생성자는 초기화 리스트를 사용하여 ab 멤버 변수를 초기화합니다.


실습 문제

문제 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과 상수 표현식"에 대해 다루겠습니다.

반응형