현재 구현 된 다양한 언어의 반복기의 내장 함수를 이해하려고합니다.C++에서 stl-like Iterator를 직접 작성하는 방법
예를 들어, 목록 인터페이스를 노출하는 다음 클래스가 있습니다. GoF의에 따르면
template<class T>
class List
{
public:
virtual void Insert(int beforeIndex, const T item) throw(ListException) =0 ;
virtual void Append(const T item) =0;
virtual T Get(int position) const throw(ListException) =0;
virtual int GetLength() const =0;
virtual void Remove(int position) throw(ListException) =0;
virtual ~List() =0 {};
};
, 탐색의 다른 종류를 지원할 수있는 반복자를 구현하는 가장 좋은 방법은 목록의 구성원에 액세스 할 수 있습니다 보호 방법과 기본 반복자 클래스 (목록의 친구)를 만드는 것입니다. Iterator의 구상 구현은 다양한 방법으로 작업을 처리하고 기본 인터페이스를 통해 List의 개인 데이터와 보호 된 데이터에 액세스합니다.
여기부터는 혼란스러워지고 있습니다. List에서 LinkedList와 ArrayList 클래스를 파생 시켰고 이에 상응하는 반복자가 있으며 각 클래스가 리턴합니다. LinkedListIterator를 어떻게 구현할 수 있습니까? 나는 절대적으로 아이디어가 부족합니다. 그리고 기본 이터레이터 클래스가 List로부터 검색 할 수있는 데이터의 종류는 무엇입니까 (이는 모든 파생 클래스의 구현이 크게 다르지만 단순한 인터페이스입니다).
부스트 반복기 라이브러리는 좋은 정보 소스이며 새로운 반복기 유형/특성 개발 http://www.boost.org/doc/libs/1_42_0/libs/iterator/doc/index.html – Hippicoder
이 냄새 Java/C# 코드와 유사합니다. 좋은 C++은 Java 나 C#처럼 보이지 않습니다. –
템플릿 화되어있는 경우 왜'List'에서 파생시키고 싶습니까? 모든'가상'한정어를 제거하고 누락 된 정의를 제공하면 이미 생각한대로 사용할 수 있습니다. – wilhelmtell