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
};

任何帮助表示赞赏!

4

1 回答 1

1

你可能做不到。迭代器(或至少大多数迭代器)特定于特定集合。

例如,operator++对于链表迭代器可能会做类似的事情,location = location -> next;operator++对于类似数组的事情可能会做类似的事情++location;

++理论上,您可以创建一个元迭代器(可以这么说),它可以与任何提供特定接口(例如,至少*!=)的迭代器一起工作。这与概念应该做的(一小部分)大致一致。仍然在讨论“concepts lite”,它可能会在未来提供类似的东西(至少提供定义这样一个接口的能力,这样你就可以直接指定特定算法需要哪些操作)。

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

于 2013-05-07T22:43:13.100 回答