0

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

话虽如此,我知道迭代器的重要部分是 ++ -- 和 * 操作。我已经成功地创建和测试了 in/decrement 运算符,但是当我尊重迭代器时,我正在概念化需要返回的内容。

我是否返回它指向的对象?

这是我的 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;
}
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 回答