24.2.1/1 iterator.requirements.general] 멋지게 요약 :
반복자는 C 균일 상이한 데이터 구조 (용기)과 함께 작동 할 수 ++ 프로그램 포인터의 일반화이다
방법. 서로 다른 유형의 데이터 구조에서 정확하고 효율적으로 작동하는 템플릿 알고리즘을 구성 할 수 있도록 라이브러리는 인터페이스뿐만 아니라 반복자의 의미 및 복잡성 가정을 공식화합니다.
"포인터의 일반화"는 포인터가 이 이터레이터라는 것을 의미합니다. std::vector<T>::iterator
은 typedef T *
이 될 수 있습니다. 그러나 대부분의 반복자는 연산자 오버로딩을 통해 인터페이스를 구현합니다. 이터레이터는 컨테이너에 속할 필요가 없습니다.
이러한 언어는 C++ 표준 작성 방법과 매우 유사합니다. 그것은 어떻게 동작 하는지를 설명하지만 기본 클래스의 측면에서 인터페이스를 정의하지 않아야합니다. 반복자에는 입력, 출력, 전달, 양방향 및 임의 액세스 등 다양한 종류가 있습니다. 각각은 다른 명세를 가지고 있으며 랜덤 액세스는 양방향 인터페이스의 엄격한 수퍼 세트이지만 C++ 유형 시스템에서는 전혀 관련이 없습니다.
반복자는 ++
및 *
이 오버로드되고 유효한 특수화가 std::iterator_traits
인 모든 클래스가 될 수 있습니다. 은 기본 클래스 std::iterator
이며 std::iterator_traits
과 함께 필요한 인터페이스를 정의합니다. C++ 제네릭 프로그래밍 및 특성 클래스에서 좋은 사례 연구입니다.
std :: map :: iterator는 어떨까요? 그래서 tpedef는 무엇이 될까요? 'T *'또는''T1 *'? –
Invictus
@Ritesh'std :: map :: iterator'는 포인터와 근본적으로 다르므로 어느 것도 될 수 없습니다. – Potatoswatter
+1은 행동 측면에서 정의됩니다. –