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의 특성을 알고 있어야 한다.
댓글
댓글 쓰기