0

私は Set クラスを作成して、それらが実際にどのように機能するかを把握し、独自の Iterator を作成しようとしています。私が理解している限り、イテレータは、構造を介した反復を抽象化する単なる高レベルのポインタです。

そうは言っても、反復子の重要な部分は ++ -- および * 操作であることは承知しています。イン/デクリメント演算子による作成とテストに成功しましたが、イテレータを参照するときに何を返す必要があるかを概念化するのに非常に苦労しています。

それが指しているオブジェクトを返しますか?

私のset.hファイルの関連コードは次のとおりです。

class Set{
private:
    struct Elem {
        ELEMENT_TYPE info;
        Elem *prev, *next;
    };
    Elem *_head, *_tail;
    int _size;

public:
    //...

    class Iterator{
        private:
            Elem * _cur;

    public:
        Iterator(){}
        Iterator( Elem* );

        Iterator operator++( int );
        Iterator operator++();
        Iterator operator--( int);
        Iterator operator--();

        bool operator==( const Iterator& rhs );
        bool operator!=( const Iterator& rhs );

        Elem operator*();

    };

     //...
};

私が言ったように、イテレータが指している「Elem」を返していますが、それは正しいですか?

Set::Elem* Set::Iterator::operator*(){

return _cur;
}
4

3 に答える 3

3

通常、参照により、ポイントされた要素を返します。

Elem&       operator*()       { return *_cur; }

ただし、イテレータのタイプに少し依存します。特定のイテレータ(入力イテレータなど)は、必ずしも参照を返すとは限りません。

于 2013-03-16T20:26:44.620 に答える
1

通常は、次のような参照を返します。

ELEMENT_TYPE & operator*() { return _cur->info;}
于 2013-03-16T20:27:58.703 に答える
0

*オペレーターは、値または参照のいずれかを返す必要があります

Set::Elem &Set::Iterator::operator*() {
    return *_cur;
}

const Set::Elem &Set::Iterator::operator*() const {
    return *_cur;
}
于 2013-03-16T20:27:24.310 に答える