2013-05-07 89 views
0

我想創建一個class iterator,可以通過各種A(我的意思是:鏈表和數組[INDEXES])。創建一個類迭代器

我該怎麼做?

我應該在A,B和C的類中定義什麼?

class Iterator { 
    A* a; 
    public: 
    A* getnext() {} 
    A* getcontant() {} 
}; 

class A { 
    public: 
    iterator* iterator() {} 
}; 

class B : public A { 
    linkedlist* head; // a linked list of nodes 
}; 

class C : public A { 
    INDEXES* vec; // vec is an array of objects of INDEXES 
}; 

任何幫助讚賞!

回答

1

你可能不能。迭代器(或者至少大部分迭代器)是特定集合的特定對象。

例如,對於operator++一個鏈表迭代器可能會做這樣的事情location = location -> next;operator++的東西類似數組可以做這樣的事情,而不是++location;。從理論上講,你可以創建一個元迭代器(可以這麼說),它可以與提供特定接口的任何迭代器(例如至少++,*!=)一起工作。這與概念應該做的(小部分)大致相同。還有一些關於「概念精簡版」的討論可能會在將來提供類似的東西(至少提供定義這種接口的能力,因此您可以直接指定特定算法需要哪些操作)。

這樣的一個元迭代器只有在你做了比這更多的事情時才真正獲得很多,比如提供了許多實現,允許你將使用一個接口的算法適配到提供各種不同接口的容器(例如,可以允許將STL算法直接應用於wxWidgets或Qt集合)。後者是相當不常見的(至少在C++中),僅僅是因爲一開始就提供體面的迭代器通常更容易。