2 분 소요

#include <iostream>
#include <vector>

int main() {
    int x[10] = {1,2,3,4,5,6,7,8,9,10};
    std::vector<int> v(x, x+10);
    
    for(auto n: v) {        // ranged for 문
        std::cout<<n<<" ";  // 1 2 3 4 5 6 7 8 9 10
    }
    std::cout<<std::endl;
    
    // 위 코드를 컴파일 하면 아래 코드가 된다.
    for(auto p = begin(v); p != end(v);++p) {
        auto n = *p;
        std::cout<<n<<" ";  // 1 2 3 4 5 6 7 8 9 10
    }
    std::cout<<std::endl;
}

사용자 정의 타입에 대해 ranged-for 을 사용하려면 begin()/end() 를 만들면 된다.

#include <iostream>

struct Point3D {
    int x, y, z;
};

int* begin(Point3D& p) {
    return &(p.x);
}
int* end(Point3D& p) {
    return &(p.z) + 1;
}

int main() {
    Point3D pt = {1, 2, 3};
    for(auto n: pt) {
        std::cout<<n<<std::endl;    // 1
                                    // 2
                                    // 3
    }
}

begin end 에서만든 show()함수: c++98 스타일<p> c++11의 새로운 문법을 사용하면 훨씬 간단하게 코드를 만들 수 있다.

#include <iostream>
#include <vector>

template<typename T>
void show(T& c) {
    for(auto n: c) {
        std::cout<<n<<" ";
    }
    std::cout<<std::endl;
}

int main() {
    int x[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    std::vector<int> v(x, x+10);
    
    show(x);    // 1 2 3 4 5 6 7 8 9 10
    show(v);    // 1 2 3 4 5 6 7 8 9 10
}

카테고리:

업데이트:

댓글남기기