2013-05-07 88 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++中),仅仅是因为一开始就提供体面的迭代器通常更容易。