创建类迭代器

Create a class iterator

本文关键字:迭代器 创建      更新时间:2023-10-16

我想创建一个可以传递各种a的class iterator(我的意思是:链表和数组[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
};

感谢任何帮助!

你可能不能。一个迭代器(或至少大多数迭代器)是特定于特定集合的。

例如,链表迭代器的operator++可能执行类似location = location -> next;的操作,而类数组迭代器的operator++可能执行类似++location;的操作。

理论上,你可以创建一个元迭代器(可以这么说),它可以与任何提供特定接口的迭代器一起工作(例如,至少++*!=)。这与概念应该做的(一小部分)大致一致。还有一个关于"概念生活"的讨论,可能在将来提供类似的东西(至少提供定义这样一个接口的能力,这样你就可以直接指定特定算法需要什么操作)。

这样的元迭代器只有在你做更多的事情时才会真正获得更多,比如提供一些实现,允许你将使用一个接口的算法适应提供各种不同接口的容器(例如,可以允许将STL算法直接应用于wxWidgets或Qt集合)。后者是相当罕见的(至少在c++中),因为首先提供合适的迭代器通常更容易。