본문 바로가기
프로그래밍/C || CPP

[STL] STL 반복자 정리 (iterator)

by _BlankSpace 2018. 4. 29.

1. STL 반복자란


C++를 사용하게 되면, 보통 STL을 사용하게 된다.

이러한 STL을 사용 하게 되면, 자연스럽게 반복자를 사용 하게 되는데..

흔히들 iterator라는 키워드로 알고 있을 것이다.


STL에서 반복자는 포인터와 비슷하게 동작한다.

반복자는 컨테이너에 저장된 원소를 순회하면서 접근하는 방법을 제공한다.

또한, 컨테이너와 알고리즘을 하나로 동작하게끔 중간에서 인터페이스 역할을 한다.

* 컨테이너 : vector, list, queue, set 등등과 같은 것을 말함.

* 알고리즘 : 검색, 삭제, 복사 등등을 말함.


STL의 모든 컨테이너는 각자의 반복자를 제공한다. 공통적으로는 멤버 함수 begin()와 end()가 순차열의 시작과 끝을 가리킨다.

주의할 점은, 순차열의 시작과 끝에서 끝은 실제 원소가 아니라, 끝을 표시하는 원소이다.

수학에서 표기하는 방법으로 표현하면, [begin, end)로 표기할 수 있다.


2. STL 반복자 특징에 따른 범주


STL은 특징에 따라서 반복자를 나눌 수 있다.

  • 입력 반복자 (input iterator) : 현 위치의 원소를 한 번만 읽을 수 있는 반복자를 말한다.
    • 예) istream
  • 출력 반복자 (output iterator) : 현 위치의 원소를 한 번만 쓸 수 있는 반복자를 말한다.
    • 예) ostream
  • 순방향 반복자 (forwawrd iterator) : 입, 출력 반복자 기능과 순방향으로 이동이 가능하고 재할당될 수 있는 반복자를 말한다.
  • 양방향 반복자 (bidirectional iterator) : 순방향 반복자 기능과 역방향까지 이동이 가능한 반복자를 말한다.
    • list, set, multiset, map, multimap
  • 임의 접근 반복자 (random access iterator) : 양방향 반복자 기능에 +, -, +=, -=, [] 연산까지 가능한 반복자를 말한다.
    • vector, deque

3. STL 반복자 사용 예


다음 예로 STL 반복자의 사용 예를 확인해보자.

각각 주석으로 벡터 생성, 삽입, 접근을 나눴으니, 천천히 코드를 보면 이해할 수 있을 것이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <vector>
 
int main()
{
    // 벡터 생성
    std::vector<int> vt; 
 
    // 벡터에 원소 넣기.
    vt.push_back(1);
    vt.push_back(2);
    vt.push_back(3);
    vt.push_back(4);
    vt.push_back(5);
 
    // 벡터 순차적으로 접근
    std::vector<int>::iterator iter;
    for (iter = vt.begin(); iter != vt.end() ; iter++)
        std::cout << "vector : " << *iter << std::endl;
 
    iter = vt.begin();
    std::cout << iter[0<< std::endl;
    std::cout << iter[1<< std::endl;
    std::cout << iter[2<< std::endl;
    std::cout << iter[3<< std::endl;
    std::cout << iter[4<< std::endl;
 
    iter += 2;
    std::cout << *iter << std::endl;
 
    return 0;
}
cs


반복자는 다음처럼 순차적이 아닌 임의적으로도 접근이 가능하다.

1
2
iter += 2;
std::cout << *iter << std::endl;
cs

출처: 뇌를 자극하는 C++ STL

글의 내용이 유익하셨다면, 좋아요 클릭과 댓글 남겨주시면 감사하겠습니다 :)


댓글