본문 바로가기

C++

[C++] 반복자

반복자는 컨테이너의 한 지점을 가리키는 객체이다. 반복자를 이용하면 알고리즘의 내부 코드에서 어떤 컨테이너이든지 상관없이 컨테이너의 요소에 접근할 수 있다. 반복자는 기능 별로 종류가 있다.

 

입력 반복자(InIt)

입력 반복자는 반복자가 가리키는 위치의 요소를 읽는 것만 가능하다.

a=*it;       // 가능

*it=a;       // 불가능

 

출력 반복자(OutIt)

요소의 내용을 변경할 수 있는 반복자이며 보통 읽기도 가능하지만 필수는 아니다.

*it=a;       // 가능

a=*it;       // 꼭 필요치 않음.

 

순방향 반복자(FwdIt)

입력, 출력이 모두 가능하고 ++it, it++를 통해 순방향으로 이동 가능하다.

 

양방향 반복자(BiIt)

순방향뿐만 아니라 --연산자로 역방향으로도 이동이 가능하다.

 

임의 접근 반복자(RanIt)

최상위 레벨의 반복자로 위 반복자들의 모든 기능을 포함하며 []연산자로 임의의 위치로 이동이 가능하다.

또한 반복자에 임의의 정수를 더하는 +n 연산을 제공한다.

 

 

 

삽입 반복자

기본으로 *it = value 하면 value가 반복자가 가리키는 위치에 덮어 쓰기 되는데 삽입 반복자에서는 

반복자가 가리키는 위치에 삽입되고 필요한 만큼 컨테이너의 크기가 늘어난다.

 

insert_iterator<container>: insert 멤버 함수로 중간에 삽입한다. 모든 컨테이너에 사용 가능

insert_iterator<Container> inserter(Container& Cont,Iterator It) //템플릿

front_insert_iterator<container>: push_front로 선두에 삽입한다. 리스트, 데크에 사용 가능

front_insert_iterator<Container>front_inserter(Container& Cont) //템플릿

back_insert_iterator<container>: push_back로 끝에 삽입한다. 모든 컨테이너에 사용 가능

back_insert_iterator<Container>back_inserter(Container& Cont) //템플릿

 

 

상수 반복자

상수 반복자는 const_iterator 타입으로 정의되고 전후로 이동해 다른 요소를 가리키는 것은 가능하지만

요소의 값을 변경하는 것은 불가능하다.  find처럼 값을 읽기만 하는 함수는 사용할 수 있지만

insert, erase, sort 처럼 값을 변경하는 함수는 사용할 수 없다.

 

 

역방향 반복자

reverse_iterator, const_reverse_iterator 상수, 비상수 버전이 따로 있다. 역방향 반복자는 rbegin부터 시작해서

rend까지 역방향 순회를 한다. 역방향 반복자에 1씩 더할 수록 반대로 순회한다. base 멤버 함수를 이용해서 순방향 반복자를 구할 수 있고 base는 역방향 반복자보다 하나 더 큰 값을 가진다. 역방향 반복자가 탐색하지 못한 곳부터 순방향으로 탐색하기 위해서다.

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

[C++] 맵(map)  (0) 2022.01.11
[C++] 셋(set)  (0) 2022.01.11
[C++] 함수 객체  (0) 2022.01.10
[C++] auto_ptr  (0) 2022.01.09
[C++] 네임 스페이스  (0) 2022.01.08