본문 바로가기
C++/라이브러리 (STL etc)

[c++] iterator에 대해서

by 스프링섬머 2023. 7. 13.
728x90

1) 컨테이너에 저장되어 있는 원소들을 참조할 때 사용

2) 추장적으로, 컨테이너의 모든 원소들을 볼 수 있는 포인터와 비슷한 객체, 여러 종류가 있음.

3) 반복자의 성질을 가지므로, 컨테이너와 안의 요소를 구별, 요소의 값 확인, 컨테이너 안에 있는 요소들 간의 이동할 수 있는 연산 제공

4) end() 함수는 끝이 아님, 맨 마지막 원소의 다음번 원소를 가르킴.

5) 반복자의 종류

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

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

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

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

- 임의 접근 반복자(random access iterator) : 읽기/쏘기 모두 가능, 임의 접근, 양방향 반복자 기능

-> 여기 보게 되면, listvector는 다른 반복자를 가지고, 증감도 다르게 수행됨. , list에서 iteratorbegion() 또는 end()를 받고 나서 증감을 수행하여 가르키는 원소를 달리하고 싶으면 ++, --를 연산해야 함. 반대로, vector++, --도 가능하며 +1,-1과 같은 증감 연사도 가능하다.

 
# 기타 주의사항
  • list의 함수들(erase, insert 등)을 사용할 시에 iterator를 인자로 넣어주는데, 반환은 변경된 리스트에서 해당 값을 가르키는 iterator를 반환한다. 즉, 따로 내가 iterator를 지정해 줄 필요가 없음.
  •  연결리스트에서 주의할 점은 특정 지점을 가르키는 iteratorerase,insert에 의해 지워졌는데도 새로 할당하지 않고 사용했을 때이다.
 
 

 

728x90

'C++ > 라이브러리 (STL etc)' 카테고리의 다른 글

[c++] cin.getline() vs getline() 및 cin.ignore() 정리  (3) 2023.07.14
[c++] 큐, STL<queue>  (0) 2023.07.13
[c++] 스택 - 일반구현 vs STL<stack>  (0) 2023.07.13
[c++] STL <list> 정리  (0) 2023.07.13
c++ STL <vector> 정리  (0) 2023.07.13