0

class iterator種類の A を渡すことができる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;代わりに次のようになります。

++理論的には、特定のインターフェイス (たとえば、少なくともと)*を提供する任意のイテレータで動作するメタイテレータ (いわば) を作成できます!=。これは、概念が行うべきことの (小さな) 部分とほぼ一致しています。将来的に同様のものを提供する可能性のある「コンセプトライト」についての議論がまだあります(少なくともそのようなインターフェースを定義する機能を提供するため、特定のアルゴリズムで必要な操作を直接指定できます)。

このようなメタイテレーターは、それ以上のことを行う場合にのみ、実際に多くの利益を得ることができます。たとえば、1 つのインターフェースを使用するアルゴリズムを、さまざまな異なるインターフェースを提供するコンテナーに適合させることを可能にする多くの実装を提供するなどです (たとえば、STL アルゴリズムを適用できるようにすることができます)。 wxWidgets または Qt コレクションに直接)。後者は (少なくとも C++ では) かなり一般的ではありません。単純に、最初から適切な反復子を提供する方が一般的に簡単だからです。

于 2013-05-07T22:43:13.100 に答える