프로그래밍
[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는 컨테이너별로 적합한 처리를 하여
모든 컨테이너에 대해 배열의 임의 접근과 같은 효과를 낼 수 있도록 한다.
반응형