프로그래밍

[C++] 모든 컨테이너를 배열처럼 접근? std::advance()

제페 2014. 5. 24. 07:07
반응형

std::advance(_InIt& _Where, _Diff _Off)는 off만큼 반복자를 이동시키는 일을 한다.


즉 std::vector<int> vec{1,2,3,4,5}; 일 때 


auto it = vec.begin();

std::advance(it, 1);

cout<<"result: "<<*it<<endl;


결과

result: 2



auto it = vec.begin();

std::advance(it, 3);

cout<<"result: "<<*it<<endl;


결과

result: 4



배열일 경우엔 임의 접근(random access, [] 연산)을 사용하는 것과 다를 바가 없지만, 


컨테이너가 list나 map 같은 것이라면 얘기가 달라진다.


std::list<int> container;

index = 2;


container[index]; // 불가능!


auto it = container.begin();

std::advence(it, index) // 가능!


std::advence는 컨테이너별로 적합한 처리를 하여 


모든 컨테이너에 대해 배열의 임의 접근과 같은 효과를 낼 수 있도록 한다.


반응형