我正在编写一个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;
}
答案 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;
}