const_iterator 나 reverse_iterator, const_reverse_itertor도 좋지만 역시 쓸만한 것은 iterator 이다

우선 반복자간의 변환가능성을 보면

  1. iterator는 모든 다른 반복자로 변환이 가능하다.
  2. reverse 반복자류는 해당하는 종류의 반복자로 base() 맴버함수를 통해 변환이 가능하다.
    (reverse_iterator -> iterator, const_reverse_iterator -> const_iterator )
  3. reverse_iterator는 const_reverse_iterator 로 변환이 가능한다.
하지만 STL에서는 반복자 사용시 아래와 같은 제약이 발생하는 경우가 있다.



  • 어떤 형태의 insert와 erase 멤버함수는 무조건 iterator 만을 넘겨야 한다.
  • const_iterator 를 iterator로 암시적으로 변환하는 방법은 없고 굳이 바꾸자면 EffectiveSTL27의 내용을 참조한다. 하지만 일반성도 떨어지고 효율에 대한 보장도 할수 없다.
  • reverse_iterator를 iterator로 변환할수 있으나, 변환후 약간의 조정이 필요하다. 자세한 내용은 EffectiveSTL28을 참고한다.
무척이나 미묘한 경우이며 별것 아니지만 해결하기 난감한 경우이다. 또한 const_iterator 와 iterator 를 비교하는 경우도 생길수 있는대 논리적으로 라면 반복자는 위치를 가르키는 것이므로 비교 연산에 문제가 없어야 하지만 특정 STL은 const_iterator 의 operator== 연산자를 잘못 구현하여 두 반복자 간의 비교가 컴파일이 안되는 경우도 발생할수 있다. 이런 여러가지 제한 상황을 생각할때 그냥 iterator 를 쓰는게 속이 편한 경우가 많다.

물론 const나 reverse는 STL에서 버그를 예방하고 유용하게 쓰이는 면이 있으므로 제한 상황을 잘알아두는 것이 좋다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다