맞춤 반복기 유형을 만들고 있는데, 현재 유일한 유스 케이스는 std::for_each
입니다. 하지만 분명히 포인터 인터페이스를 모방하는 것만으로는 충분하지 않습니다. (전진 반복 만하고 있습니다.) bajillion 중첩 된 typedef가 있습니다. 나는 iterator_category
에 무엇을 넣어야하는지 알아낼 수 있었지만 실제로는 value_type
과 pointer
및 reference
이 무엇인지 알아내는 데 어려움을 겪고 있습니다. 여기 컨테이너를 만들지 않으므로 iterator입니다. 왜 for_each
도 알아 두거나 신경 써야할까요? 앞으로 할 일은 앞으로 다른 기능에 대해 말한 것입니다.반복자 중첩 된 typedef
답변
유형 T
을 반복자로 사용하려면 std::iterator_traits
을 해당 유형에 대해 특수화 할 수 있어야합니다. 즉, 기본적으로 사용되는 다섯 개의 중첩 된 typedef를 제공해야하거나 직접 std::iterator_traits
을 전문화해야합니다. 이 요구 다섯 중첩 형식 정의는 (std::distance
의해 반환되는 바와 같이, 예) 개의 반복기 사이의 거리를 나타낼 수있는 몇 가지 유형
VALUE_TYPE를이다
difference_type, 어느 반복기가 가리키는 객체의 유형입니다.
포인터은 반복기 유형의 반환 유형입니다.
operator->
. 반드시 포인터 유형 일 필요는 없으며 반드시value_type*
또는value_type const*
일 필요는 없습니다. 예를 들어, 요소를 생성하는 반복자가있는 경우 포인터를 반환 할 수있는 객체가 없을 수 있습니다. 이 경우 반환 된 요소를 래핑하는 객체를 반환하고operator->
자체에 오버로드 할 수 있습니다.참조으로, 이터레이터 유형의
operator*
의 리턴 유형입니다. 반드시 참조 유형 일 필요는 없으며 반드시value_type&
(또는value_type const&
) 일 필요는 없습니다. 예를 들어, 변경할 수없는 정수 범위를 반복하는 경우 성능상의 이유로 요소를 값으로 반환 할 수 있습니다. 반복자 카테고리 태그 또는 그 태그 중 하나에서 파생 된 유형 중 하나 여야합니다 iterator_category:
input_iterator_tag
,output_iterator_tag
,forward_iterator_tag
,bidirectional_iterator_tag
및random_access_iterator_tag
(네임 스페이스std
의 모든). 알고리즘은 이것을 사용하여 반복자 범주에 따라 최적의 알고리즘을 선택할 수 있습니다.
이 중 일부를 생략 할 수 없습니다. 그들 모두는 정의되어야한다. 즉, 때로는 하나 이상의 typedef가 의미가 없을 수도 있습니다. 예를 들어, char
요소를 즉석에서 생성하는 반복기가있는 경우 반복자는 operator->
을 구현하지 못할 수 있습니다 (char
은 클래스 유형이 아니기 때문에). 이 경우 어쨌든 사용해서는 안되기 때문에 pointer
유형의 경우에만 void
을 사용하는 것이 좋습니다.
value_type
이터레이터가 반복합니다. iter
이 반복자이면 *iter
유형입니다. pointer
이 그것에 대한 포인터이며 reference
이 이에 대한 참조입니다.
- 1. 중첩 된 반복자 오류
- 2. 중첩 된 네임 스페이스에서 유형 주입 : typedef 또는?
- 3. typedef 된 클래스를 어떻게 전달합니까?
- 4. 사용 부스트 :: 반복자
- 5. iterator 인터페이스로 중첩 된 foreach
- 6. 명명 된 반복자 및 예외
- 7. 반복자 분류 코드에서
- 8. 외부 반복자 대 내부 반복자
- 9. typedef struct
- 10. Java : 반복자
- 11. 중첩 클래스와 관련된 "typedef"를 만드는 방법은 무엇입니까?
- 12. Typedef 일반화
- 13. 재귀 typedef
- 14. 루핑 typedef
- 15. 범위 지정/참조 횟수 반복자
- 16. 중첩 된 컨테이너 멤버에 액세스
- 17. boost :: variant에 대한 반복자
- 18. C++ 반복자 및 연결된 목록
- 19. 벡터 반복자
- 20. 반복자 단점
- 21. 반복자 문제
- 22. C++ STL unordered_map 반복자 문제
- 23. 파이썬은 내가 목록을 작성했습니다 중첩 된 목록
- 24. .NET DLL에서 typedef 내보내기
- 25. typedef 오류의 재정의
- 26. 여러 반복자 요소 변환하기
- 27. omnicppcomplete가 typedef 구문을 지원합니까?
- 28. 중첩 된 오버로드 된 연산자?
- 29. C++ 컨테이너의 반복자
- 30. 벡터의 양쪽 끝의 반복자
[부스트 반복기 외관] (http://www.boost.org/doc/libs/1_47_0/libs/iterator/doc/index.html#iterator-facade-and-adaptor)을 사용해보십시오. 반복자 작성을 더 쉽게 만들어야합니다. –