본문 바로가기

Program Languege/STL

반복자(iterator)

반복자(iterator)

 

 포인터의 일반화라고하며 반복자는 포인터를 그대로 흉내내어 임의의 컨테이너에 저장된 모든 요소를 순서대로 가리킬 수 있다. 반복자의 목적은 컨테이너 내부 순회에 있다.

 

1. 컨테이너의 요소 하나를 가리키는 기본적인 역할을 한다.

2. 가리키는 지점의 요소를 읽고 쓸 수 있다. 내용을 읽는 * 연산자가 정의된다.

3. 증감에 의해 주변 요소로 이동할 수 있다. ++, -- 등의 연산자가 정의된다.

4. 반복자끼리 대입, 비교 가능해야 한다. 대입, 비교 연산자가 정의된다.

 

컨테이너에 대해 어떤 작업을 하고 싶다면 컨테이너에 저장되어 있는 요소에 접근해야 하므로 순회가 꼭 필요하다.

 

 

 

 반복자 카테고리

 기능 

 제공자 

 입력 반복자

 전방향 읽기

 istream 

 출력 반복자

 전방향 쓰기 

 ostream, inserter

 전방향 반복자

 전방향 읽기, 쓰기

 

 양방향 반복자

 전방향, 역방향 읽기, 쓰기

 list, set, multiset, map, multimap 

 랜덤 엑세스 반복자

 랜덤 액세스

 vector, deque, string, array 

 

 

 

입력 반복자(Input Iterators)

 

입력 반복자는 오로지 원소를 전진 방향으로만 "읽기(read)" 액세스할 수 있는 반복자이다.

 

 

 표현식

 효과

 *iter

 실제 원소에 대한 읽기(read) 액세스를 제공한다.

 iter->member

 실제 원소의 멤버에 대한 읽기(read) 액세스를 제공한다.

 ++iter

 전방향으로 전진한다.(새로운 위치를 반환한다)

 iter++

 전방향으로 전진한다.(예전 위치를 반환한다)

 iter1 == iter2

 두 반복자가 같은지 판별한다

 iter1 != iter2

 두 반복자가 같지 않음을 판별한다.

 TYPE(iter)

 반복자를 복사한다.(복사 생성자)

 

 

 

출력 반복자(Output Iterators)

 

 출력 반복자는 입력 반복자와 매우 비슷한 반복자이다. 이 출력 반복자는 오로지 원소를 전진 방향으로만 "쓰기(write)" 액세스를 할 수 있는 반복자이다. 입력 반복자의 경우 비교할 필요가 없다.

 

 

 표현식

 효과

 *iter = value

 반복자가 참조하는 곳에 value를 기록한다.(l-value로만 사용.)

 ++iter

 전방향으로 전진한다.(새로운 위치를 반환한다)

 iter++

 전방향으로 전진한다.(예전 위치를 반환한다)

 TYPE(iter)

 반복자를 복사한다.(복사 생성자)

 

 

 

 

전방향 반복자(Forward Iterators)

 

 전방향 반복자는 입력 반복자인 동시에 출력 반복자인 반복자를 의미한다. 전방향 반봊가는 입력 반복자의 모든 기능과 출력 반복자의 대부분의 기능을 가지고 있다.

 

 

 표현식

 효과

 *iter

 실제 원소에 대한 읽기(read) 액세스를 제공한다.

 iter->member

 실제 원소의 멤버에 대한 읽기(read) 액세스를 제공한다.

 ++iter

 전방향으로 전진한다.(새로운 위치를 반환한다)

 iter++

 전방향으로 전진한다.(예전 위치를 반환한다)

 iter1 == iter2

 두 반복자가 같은지 판별한다

 iter1 != iter2

 두 반복자가 같지 않음을 판별한다.

 TYPE()

 반복자를 생성한다.(디폴트 생성자)

 TYPE(iter)  반복자를 복사한다.(복사 생성자)
 iter1 = iter2

 반복자를 대입한다.

 

 

 

양방향 반복자(Bidirectional Iterators)

 

 양방향 반복자는 원소를 역순으로 순회할 수 있는 기능을 추가한 전방향 반복자이다. 따라서 연순으로 순회하기 위한 감소 연산자를 제공한다.

 

 

 표현식

 효과

 *iter

 실제 원소에 대한 읽기(read) 액세스를 제공한다.

 iter->member

 실제 원소의 멤버에 대한 읽기(read) 액세스를 제공한다.

 ++iter

 전방향으로 전진한다.(새로운 위치를 반환한다)

 iter++

 전방향으로 전진한다.(예전 위치를 반환한다)

 --iter

 역방향으로 전진한다.(새로운 위치를 반환한다) 
 iter--

 역방향으로 전진한다.(예전 위치를  반환한다)

 iter1 == iter2

 두 반복자가 같은지 판별한다

 iter1 != iter2

 두 반복자가 같지 않음을 판별한다.

 TYPE()

 반복자를 생성한다.(디폴트 생성자)

 TYPE(iter)  반복자를 복사한다.(복사 생성자)
 iter1 = iter2

 반복자를 대입한다.

 

 

 

 

랜덤 액세스 반복자(Random Access Iterators)

 

 랜덤 액세스 반복자는 랜덤 액세스를 할 수 있는 양방향 반복자이다. 랜덤 엑세스 기능을 지원하므로, 이 반복자는 +, - 와 같은 반복자 연산자를 제공할 뿐만 아니라 오프셋을 더하거나 뺄 수도 있고 <, > 연산자를 사용하여 두 반복자를 비교할 수도 있다.

 

 

 표현식

 효과

 iter[n]

 인덱스가 n인 원소의 액세스를 제공한다.

 iter+=n

 n원소 만큼 전방향 전진한다.(n이 음수라면 역방향 전진)

 iter-=n

 전방향으로 전진한다.(새로운 위치를 반환한다)

 iter+n

 전방향으로 전진한다.(예전 위치를 반환한다)

 n+iter

 역방향으로 전진한다.(새로운 위치를 반환한다) 
 iter-n

 역방향으로 전진한다.(예전 위치를  반환한다)

 n-iter

 두 반복자가 같은지 판별한다

 iter1 - iter2

 두 반복자가 같지 않음을 판별한다.

 iter1 < iter2

 반복자를 생성한다.(디폴트 생성자)

 iter1 > iter2  반복자를 복사한다.(복사 생성자)
 iter1 <= iter2

 반복자를 대입한다.

 iter1 >= iter2  

 

 

 

출처 - 혼자 연구하는 C/C++, The C++ Standard Library : A Tutorial and Reference

'Program Languege > STL' 카테고리의 다른 글

set 함수  (0) 2014.03.19
list 함수  (0) 2014.03.19
vector 함수  (0) 2014.03.19
컨테이너(Container)  (0) 2014.03.18
STL - Standard Template Library  (0) 2014.03.18