为迭代器编写一个解引用运算符

时间:2013-03-16 20:22:41

标签: c++ data-structures iterator set

我正在编写一个Set类,以便了解它们的工作方式,以及尝试编写自己的Iterator。据我所知,Iterator只是一个高级指针,它抽象,通过结构迭代。

话虽如此,我知道迭代器的重要部分是++ - 和*操作。我已经成功地通过in / decrement运算符创建和测试了,但是当我遵循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*();

    };

     //...
};

就像我说的那样,我将返回Iterator指向的“Elem”,这是正确的吗?

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

return _cur;
}

3 个答案:

答案 0 :(得分:3)

通常您将通过引用返回指向的元素。

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

但它确实依赖于迭代器类型。某些迭代器(例如输入迭代器)不一定会返回引用。

答案 1 :(得分:1)

您通常会返回一个引用,例如:

ELEMENT_TYPE & operator*() { return _cur->info;}

答案 2 :(得分:0)

*运算符应返回值或引用

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

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