C++

반복자

kdi6316 2025. 2. 5. 20:14

 

반복자

 

목차

 

1. 반복자란?

2. 반복자의 성질

3. 반복자 구간(range)

4. 반복자의 종류

 

 

반복자란?

C++ 라이브러리는 반복자를 제공하는데 이것을 사용하면 라이브러리의 방식대로 자료구조를 액세스 할 수 있다.
따라서 라이브러리가 효과적으로 동작한다는 것을 보장 할 수 있다는 장점이 있다.
 
즉, 포인터와 상당히 비슷하며, 컨테이너에 저장되어 있는 원소들을 참조할 때 사용한다.
 
추상적으로 말하자면, 반복자란 컨테이너에 저장되어 있는 모든 원소들을 전체적으로 훑어 나갈 때 사용하는, 일종의 포인터와 비슷한 객체라고 할 수 있다. 알고리즘 마다 각기 다른 방식으로 컨테이너를 훑어가기 때문에, 반복자에도 여러가지 종류가 있게 된다. 

반복자의 성질

1.컨테이너와 컨테이너 안의 있는 요소를 구별

2.요소의 값 확인

3.컨테이너 안에 있는 요소들 간에 이동할 수 있는 연산 제공

4.컨테이너가 효과적으로 처리할 수 있는 방식으로 가용한 연산들을 한정

 

반복자 구간(range)

구간이란 컨테이너에 담긴 값들의 시퀀스를 나타낸다, 구간은 반복자 한 쌍으로 나타내며, 이 반복자들이 각각 시퀀스의 시작과 끝을 가리킨다. 반복자는 특정 값을 지정하는데 사용될 수 있으며, 연속적인 메모리 영역을 두 개의 포인터로 나타내듯이 한 쌍의 반복자는 값들의 구간을 설정하는데 사용될 수 있다.

 

그러나 반복자의 경우 설정되는 범위 내의 값들이 반드시 물리적으로 연속적이어야 할 필요가 없다 .단, 이 두개의 반복자가 같은 컨테이너로부터 생성된 것이어야 하며, 두번째 반복자는 첫번째 반복자 이후에 와야한다. 그리고 첫번째 반복자에서 두번째 반복자까지 차례로 컨테이너 내부의 원소들을 처리하게 되므로 논리적인 연속성을 지닐 수 있다. 

 

또한 반복자 2개를 사용하여 컨테이너의 특정 구간에 속한 원소들을 나타내고자 한다면, 두번째 반복자가 첫번째 반복자에 도달가능 해야한다. 
 
그리고, 포인터는 널(NULL) 값을 가질 수 있는데 이는 아무것도 가리키지 않는다는 의미이다. 반복자 또한 어떤 값도 가리키지 않는 반복자를 참조하는 것은 에러를 발생시킨다. 

 

end() 함수

컨테이너를 다룰 때 자주 쓰이는 end()라는 멤버함수는 컨테이너의 맨 마지막 원소를 가리키는게 아닌 마지막 원소의 바로 다음번 원소를 가리킨다. 이러한 반복자를 past-the-end반복자라고 부른다.

end() 멤버함수를 통해 얻어지는 반복자는 결과적으로 아무 의미가 없는 것을 가리키고 있는 것이며, 이 반복자가 가리키는 것을 참조하면 예상치 못한 오류가 발생하게 된다.

아무것도 없는 컨테이너의 begin()과 end()는 같다

반복자의 종류

입력 반복자(input iterator) :  읽기만 가능, 순방향 이동, 현 위치의 원소를 한 번만 읽을 수 있는 반복자

 

출력 반복자(output iterator) : 쓰기만 가능, 순방향 이동, 현 위치의 원소를 한 번만 쓸 수 있는 반복자 

 

순방향 반복자(forward iterator) : 읽기/쓰기 모두 가능, 순방향 이동(++)이 가능한 재할당될 수 있는 반복자

 

양방향 반복자(bidirectional iterator) : 읽기/쓰기 모두 가능, 순/역 방향 이동(--)이 가능한 반복자 

 

임의 접근 반복자(random access iterator) :  읽기/쓰기 모두 가능, 임의 접근, 

                                                      양방향 반복자 기능에 +, -, += , -=, [] 연산이 가능

'C++' 카테고리의 다른 글

[STL]map과 set  (0) 2025.02.10
온라인 학습 관리 시스템 구현해보기  (0) 2025.02.07
STL[컨테이너]  (1) 2025.02.03
OOP 단계별 프로젝트2  (0) 2025.01.23
Chapter 04 클래스의 완성  (0) 2025.01.09