我想创建一个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
};
任何帮助表示赞赏!
答案 0 :(得分:1)
你可能不能。迭代器(或至少大多数迭代器)特定于特定集合。
例如,对于链接列表迭代器,operator++
可能会执行类似location = location -> next;
的操作,而operator++
可能会执行类似于++location;
之类的操作。{ / p>
理论上,您可以创建一个元迭代器(可以这么说),它可以与任何提供特定接口的迭代器一起使用(例如,至少++
,*
和{{1} })。这与概念应该做的(一小部分)大致相同。还有一些关于“概念精简版”的讨论可能在未来提供类似的东西(至少提供定义这样一个界面的能力,因此你可以直接指定特定算法需要哪些操作)。
如果你做了更多的事情,这样的元迭代器实际上只会获得很多,例如提供许多实现,允许你使用一个接口的算法适应提供各种不同接口的容器(例如,可以允许)将STL算法直接应用于wxWidgets或Qt集合)。后者是一种相当罕见的(至少在C ++中),因为它通常更容易提供正确的迭代器。