프로그래밍/c++
vector와 map에서의 end, 반복자의 성격.
제페
2016. 4. 2. 16:54
반응형
vector의 end는 데이터를 추가적으로 삽입한 이후(push_back) 이전 end는 무효화가 되죠? 반면 map은 end가 어느 시점에서의 end던 항상 컨테이너 요소의 끝을 의미하기에, 이 부분에 대한 명확한 스펙이 있는지 궁금했습니다. 코드로 보자면,
는 같지 않은 반면,
map은 몇 개를 삽입한 이후에 end를 비교해도 같다는 거죠. 이 부분이 궁금했는데 누군가 이런 글을 남겨주셨어요. http://www.open-std.org/.../wg21/docs/papers/2014/n4296.pdf 763 page: 맨밑에 보시면, map같은 연관 컨테이너의 insert는 반복자(iterator)를 무효화하지 않고, 다만 해당 노드가 삭제될 때 그 노드를 가리키고 있는 iterator만 무효화 된다고 나와있습니다. 참고로, end() 는 데이터의 끝이 아니라 'past-the-end' '요소의 끝을 지나친 어떤 값'으로 정의되어있습니다. 따라서, vector같은 연속적 컨테이너의 경우에는 데이터를 추가하면 이전의 end()가 'past-the-end'가 되는 것이 불가능 하겠지요. 그래서 당연히 저장했던 end()의 값은 무효화된 값이 되겠습니다. 결론적으로 map과 같은 연관 컨테이너의 경우 어느 시점에서의 end던 항상 같은 end를 보장합니다. |
반응형