이전에 이터레이터를 구현하는 글을 작성했었다. 이터레이터란 무엇이냐?, 이터레이터는 STL 컨테이너를 다루기 위한 일반화된 포인터이다. 이터레이터라는 개념없이, STL 컨테이너를 구현할 수 없다. 즉, 이터레이터는 곧 컨테이너이다. STL의 이터레이터는 기본적으로 다음의 연산을 지원한다.
* | 원소의 현재 위치를 반환한다. |
==, != | 두 위치를 비교한다. |
= | 이터레이터에 새로운 값을 할당한다. |
STL에는 여러 컨테이너들이 존재한다. 당연히, 각각에 컨테이너에 따른 최적화된 이터레이터가 구현되어있다. 예를들어 forward iterator는 한쪽방향으로만 순회한다. bidirectional iterator는 양방향으로 순회한다. random access iterator는 임의의 원소에 직접 접근할 수 있다.
Iterator catetory | properties | containers |
forward iterator | ++It, It++ *It It == It2, It! != It2 |
unordered_set unordered_map unordered_multiset unordered_multimap foward_list |
bidirectional iterator | --It, It-- | set map multiset multimap list |
random access iterator | It[i] It += n, It -=n It+n, It-n n+It It-It2 It < It2, It <= It2, It > It2, It >= It2 |
deque |
contiguous iterator | array vector string |
<iterator>에는 반복자와 컨테이너를 위한 유용한 helper function(전역)이 구현되어있다. 코딩 문제를 푸는데 요긴하게 쓸수있다.
global function | description |
std::begin(cont) | cont 의 begin 반복자를 반환 |
std::end(cont) | cont 의 end 반복자를 반환 |
std::rbegin(cont) | cont 의 역방향 begin 반복자를 반환 |
std::rend(cont) | cont 의 역방향 end 반복자를 반환 |
std::cbegin(cont) | begin의 상수버전 반환 |
std::cend(cont) | end의 상수버전 반환 |
std::crbegin(cont) | rbegin의 상수버전 반환 |
std::crend(cont) | rend의 상수버전 반환 |
std::prev(it) | it의 이전 반복자를 반환 |
std::next(it) | it의 다음 반복자를 반환 |
std::distance(first, secont) | first와 second 사이의 원소의 개수를 반환 |
std::advance(it, n) | it에서부터 n번째 반복자를 반환 |
'C++' 카테고리의 다른 글
C++ 클래스의 메모리 오버헤드 (0) | 2023.06.16 |
---|---|
[C++11] Move Semantic에 대한 간단한 설명 (1) | 2022.09.23 |
[C++14] Virtual Inheritance (0) | 2022.09.18 |
[C++20] Concepts (0) | 2022.09.17 |
값 카테고리, 타입 카테고리 (0) | 2022.07.04 |