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 |
---|