공부/C || C++

C++ iterator의 종류(input, output, forward, bidirectional, random access iterator)

sudo 2021. 7. 19. 03:26

C++에는 사실 다양한 종류의 반복자를 가지고 있다. 그리고 반복자마다 가능한 동작, 불가능한 동작이 따로 있다.

그리고 STL의 containter마다 지원되는 iterator도 달라서 숙지할 필요가 있다.

 

우선 카테고리는 아래와 같다.

http://www.cplusplus.com/reference/iterator/

더 큰 범주를 나타내는 iterator는 순서대로 Random Access iterator > Bidirectional iterator > Forward iterator > Input/Ouput iterator이다. 

 

우선 모든 iterator들은 복사, 대입 연산이 가능하며 디폴트 복사생성자가 있으며 ++ 연산이 가능하다(Note: --는 Bidirection부터 된다).

 

Input Iterator는 복사, 대입, 비교(==, !=), 역참조(*, ->를 사용하되 rvalue로만 사용 가능. *iter1 = 3 이렇게 lvalue로는 불가능하고 foo(*iter) 이런식으로 rvalue로만 역참조 가능)가 가능하다.

 

Output Iterator는 복사, 대입, 비교(==, !=), 역참조(*, ->를 사용하되 Input iterator와 반대로 lvalue로만 사용 가능)가 가능하다.

 

Forward Iterator는 Input/Output Iterator의 기능들을 모두 사용 가능하다.

 

Bidirectional Iterator는 앞의 Iterator의 기능을 모두 포함하면서 동시에 --연산이 가능해서 앞/뒤로 이동이 가능하다. list, set, map container가 이 Bidirectional Iterator를 사용하므로 Bidirection Iterator가 지원하지 않는 기능인 +, -, +=, -= 같은 연산이 안된다. list, set, map이 bidirectional iterator를 사용한다.

 

Random Access Iterator는 역시 앞의 모든 기능들을 포함하면서 동시에 산술 연산(+, -, +=, -=), 비교 연산(<, >, <=, >=), 역참조 연산자([])가 지원된다. vector, deque가 random access iterator를 사용한다.

따라서 vector에는 iterator에 2를 더하는 산술 연산을 해도 random access iterator를 사용해서 에러가 뜨지 않지만 list의 bidirectional iterator는 산술 연산이 지원되지 않기 때문에 빨갛게 에러가 뜬다.

 

 

 

Reference 

http://www.cplusplus.com/reference/iterator/

 

- C++ Reference

Supports inequality comparisons (<, >, <= and >=) between iteratorsa < b a > b a <= b a >= b

www.cplusplus.com

https://en.cppreference.com/w/cpp/iterator

 

Iterator library - cppreference.com

The iterator library provides definitions for five (until C++17)six (since C++17) kinds of iterators as well as iterator traits, adaptors, and utility functions. [edit] Iterator categories There are five (until C++17)six (since C++17) kinds of iterators: L

en.cppreference.com

https://ansohxxn.github.io/stl/chapter16-2/

 

[C++ 표준] STL 반복자(+ 반복자의 종류 Iterator Category

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀 🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!

ansohxxn.github.io