음악, 삶, 개발

Range based for loop 를 나의 클래스에서 사용하기 본문

개발 공부/C++ 약점공략

Range based for loop 를 나의 클래스에서 사용하기

Lee_____ 2020. 10. 19. 21:16

곧바로 vector 를 사용하지않고, 나의 클래스를 만들고

멤버로 vector 를 사용하는 경우가 자주있다.

이때는 vector 를 가지고있는 클래스안에 begin() 과 end() 함수를 아래와 같이

정의해주면 된다.

 

class Cat {

    public :

        Cat(int toAge) : age(toAge) {};

        int getAge() const { return age; }

    private :

        int age;

};

class Cats {

    public :

        Cats() {}

        void add(const Cat& cat) { cats.push_back(cat); }

        /* to use range based for loop */
        auto begin()            { return cats.begin(); }
        auto begin()    const   { return cats.cbegin(); }
        auto end()              { return cats.end(); }
        auto end()      const   { return cats.cend(); }

    private :

        std::vector<Cat> cats;

};

int main () {

    Cat c1 {1};
    Cat c2 {2};
    Cat c3 {3};

    Cats cats;

    cats.add(c1);
    cats.add(c2);
    cats.add(c3);

    /* range based for loop in own class */
    for (const auto& it : cats) {
        std::cout << it.getAge() << std::endl; // 1 2 3 
    }
    
    return 0;
}