Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为迭代器编写解引用运算符_C++_Data Structures_Iterator_Set - Fatal编程技术网

C++ 为迭代器编写解引用运算符

C++ 为迭代器编写解引用运算符,c++,data-structures,iterator,set,C++,Data Structures,Iterator,Set,我正在编写一个Set类,以便了解它们的实际工作方式,并尝试编写自己的迭代器。据我所知,迭代器只是一个高级指针,它通过一个结构抽象出迭代 尽管如此,我知道迭代器的重要部分是++--和*操作。我已经成功地创建并测试了in/decrement操作符,但是我在概念化我在遵从迭代器时需要返回的内容时花了很多时间 我是否返回它指向的对象 以下是我的set.h文件中的相关代码: class Set{ private: struct Elem { ELEMENT_TYPE info;

我正在编写一个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*();

    };

     //...
};
就像我说的,我返回迭代器指向的“元素”,对吗

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

return _cur;
}
通常通过引用返回指向的元素

Elem&       operator*()       { return *_cur; }
不过,它确实有点依赖于迭代器类型。某些迭代器(例如输入迭代器)不一定会返回引用。

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

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

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

操作符
*
应该返回值或引用

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

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

*
运算符应返回值或引用

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

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

您通常会返回一个引用,类似于:

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

您通常会返回一个引用,类似于:

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

请阅读。您是否错过了显示
value\u type&operator*()的部分通过引用返回,这与答案相同?当然没有找到该部分。请阅读。是否没有找到显示
value\u type&operator*()的部分通过引用返回与答案相同的内容?当然错过了该部分。感谢您的回答@Joshua:由于
elem
是一种内部节点类型,更像迭代器应该返回对
ELEMENT\u类型的引用
,谢谢您的回答@Joshua:由于
elem
是一种内部节点类型,更像迭代器应该返回对
ELEMENT\u类型的引用,通常,
const
迭代器返回对可变数据的引用,
const\u迭代器
返回对不可变数据的引用。迭代器(包括指针)就是这样奇怪的
const char*
vs
char*const
。通常,
const
迭代器返回对可变数据的引用,
const\u迭代器
返回对不可变数据的引用。迭代器(包括指针)就是这样奇怪的<代码>常量字符*
vs
char*const