음악, 삶, 개발
Range based for loop 를 나의 클래스에서 사용하기 본문
곧바로 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;
}