Iterator category

STL에서는 iterator의 category를 알고 사용하는 것이 매우 중요한데 그 이유는 category 별로 사용할 수 있는 generic algorithm 이 다르기 때문이다. 예를 들어 list<>의 내용을 generic algorithm인 sort() 를 사용하여 정렬할 수 없는데 그 이유는 sort()는 random access iterator만 parameter로 입력 받을 수 있기 때문이다.


STL의 Iterator는 수행 가능한 operator에 따라 다음과 같이 분류된다.


category
operator
input
= *p, ++
output
*p =, ++
forward
*p =, = *p, ++
bidirectional
*p =, = *p, ++, --
random access
*p =, = *p, ++, --, +, -, []


STL의 Container 각각이 가지고 있는 iterator의 category는 다음과 같다.


container
category
array, vector, deque, string
random access
list
bidirectional


Generic algorithm이 요구하는 iterator의 category는 다음과 같다.


generic algorithm
category
find(), advance()
input
reverse()
bidirectional
sort()
random access


list container의 경우 bidirectional iterator를 지원하기 때문에 generic sort() 를 사용 할 수 없다. 대신 list의 경우는 sort()를 직접 지원한다.


직접 만든 Container를 generic algorithm 에서 사용할 수 있도록 하기 위해서는 이러한 iterator의 특성을 알고 있어야 한다.

댓글

이 블로그의 인기 게시물

Raspberry pi 한글 설정 및 chromium 설치

Google Test를 이용한 Class의 Private/Protected Member Test