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