[C++] 반복자(iterator)

2025. 1. 2. 21:41·C++

1. 반복자 구조

반복자(iterator)는 포인터를 추상화한 것입니다. 포인터는 C++이 제공하는 문법이므로 추가적인 제한을 걸거나 기능을 추가할 수 없지만 반복자라는 객체로 포인터를 추상화하면, 추가적인 제한을 걸거나 기능을 추가할 수 있습니다.

또한 반복자를 사용하면 컨테이너의 내부 구조를 사용자에게 숨기고, 사용만 하게 만들 수 있습니다. 대부분의 컨테이너는 내부적으로 조작할 수 없는 내부 반복자를 갖고 있습니다. 그리고 사용자는 외부 반복자를 사용해서 컨테이너 내부의 요소에 접근합니다. 내부 반복자는 외부 반복자를 처리할 때 사용됩니다.

 

2. 반복자 종류

반복자는 입력 반복자, 출력 반복자, 전방 반복자, 양방향 반복자, 임의 접근 반복자로 구분합니다.

입력 반복자

입력 반복자(input iterator)는 요소를 읽을 때 사용하며 읽기만 가능합니다.

 

출력 반복자

출력 반복자(output iterator)는 요소를 쓸 때 사용합니다. 쓰기만 가능합니다.

 

전방 반복자

전방 반복자(forward iterator)는 요소를 읽고 쓸 때 사용합니다. 기능적으로 입력 반복자와 출력 반복자가 결합된 것입니다.

 

양방향 반복자

양방향 반복자(bidirectional iterator)는 양방향으로 움직일 수 있는 반복자입니다. ++ 연산자와 -- 연산자가 정의를 사용해 전방 혹은 후방으로 이동할 수 있습니다.

 

임의 접근 반복자

임의 접근 반복자(random-access iterator)는 양방향 접근자에 [], +, -, <, ≤, >, ≥ 연산자를 추가한 반복자입니다. 이를 사용해 한 번에 원하는 위치의 요소에 접근할 수 있습니다.

 

3. 이동 방향

컨테이너는 기본적으로 기본 반복자(iterator)와 역 반복자(reverse_iterator)라는 2가지 종류의 반복자를 정의하고 있습니다.

기본 반복자의 ++와 +는 뒤로 이동, --와 -는 앞으로 이동을 나타냅니다. 역 반복자의 ++와 +는 앞으로 이동, --와 -는 뒤로 이동을 나타냅니다.

 

4. 상수성

데이터를 변경할 수 있는지 없는지를 상수성(constantness)이라고 표현합니다.

 

자료형 const iterator

const iterator는 한 번 어떤 요소를 가리키면, 다른 요소를 가리킬 수 없습니다. 마치 배열의 이름처럼 고정된 곳을 가리킵니다.

 

자료형 const_iterator

const_iterator 자료형은 요소를 rvalue로 역 찹조합니다. 따라서 요소를 변경할 수 없습니다. 마치 값을 변경할 수 없는 상수로 배열을 선언한 것과 비슷합니다.

 

 

출처: 포르잔 C++ 바이블

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

[C++] Pass by value와 Pass by reference  (2) 2024.12.09
'C++' 카테고리의 다른 글
  • [C++] Pass by value와 Pass by reference
개발자 밍
개발자 밍
dev0404 님의 블로그 입니다.
  • 개발자 밍
    Developer
    개발자 밍
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • 강의 (8)
        • UE Climbing System (3)
        • UE Dungeon (1)
        • HCI (4)
      • 책 (18)
        • 객체지향의 사실과 오해 (5)
        • Effective C++ (3)
        • 이득우의 게임 수학 (4)
        • 이것이 취업을 위한 컴퓨터 과학이다 (4)
        • 리뷰 (2)
      • C++ (2)
      • 알고리즘 (2)
      • 자료구조 (1)
      • Unreal (4)
      • 내일배움캠프 (52)
        • TIL (52)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    그래픽스
    게임수학
    내일배움캠프
    객체지향
    컴퓨터구조
    자료구조
    컴퓨터 구조
    언리얼
    c++
    알고리즘
    Effective
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
개발자 밍
[C++] 반복자(iterator)
상단으로

티스토리툴바