article thumbnail image
Published 2022. 9. 19. 12:39
 

[C++] 범위기반 for 루프를 위한 클래스 템플릿 최소 구현

반복자를 증가시키는 operator++ 반복자를 역참조하고 반복자가 가리키는 값에 접근하는 operator* 다른 반복자와 비항등성을 비교하는 operator!= begin(), end() 함수 #include #include template class dummy_a..

entrypoint.tistory.com

이전에 이터레이터를 구현하는 글을 작성했었다. 이터레이터란 무엇이냐?, 이터레이터는 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
복사했습니다!