【发布时间】:2015-04-15 00:21:24
【问题描述】:
接着这个问题:std::list implementation & pointer arithemetic.
我想实现一个列表迭代器,它可以与其他常见的容器类型及其各自的迭代器互换,所以我想使用诸如:--、++、* 之类的运算符并且能够正常声明迭代器,所以: list::iterator iter = list.begin();
--, ++ 运算符现在可以正常工作,但我遇到了取消引用迭代器的问题,因为结构不能返回值:T iterator::operator*()
template <class T>
struct element {
element<T> *prev = NULL;
element<T> *next = NULL;
T data;
};
template <typename T>
class list {
public:
list::list();
element<T>* current;
struct iterator{
element<T>* iterator::operator++(){
this = *this->next; ..whatever it works
}
element<T>* iterator::operator--()
T iterator::operator*()
}
};
【问题讨论】:
-
你会希望
operator*返回一个reference,或者像*i = 0这样的代码会尝试分配一个临时副本。 -
好吧,你不要重载后缀增加/减少运算符,只是前缀。我很惊讶它们运行良好,因为如果它们如您在代码 sn-p 中显示的那样使用它们可能会导致未定义的行为。 (提示:他们不应该返回东西吗)?
-
您是否遇到特定错误? “结构不能返回值”不清楚,我认为这就是人们只是指出任意错误的原因。
-
另外,我认为这里的主要问题是你处理 pointers 到迭代器,但你应该处理迭代器的 values,即实际迭代器实例。
-
只是为了澄清一件事; NO 限制了函数可以返回什么,因为它是结构的一部分。如果常规函数或类函数可以返回它,那么结构体就很好。
标签: c++ list iterator operators dereference