【发布时间】:2017-12-26 18:16:54
【问题描述】:
在二叉搜索树中,end() 成员函数应该简单地返回 iterator(nullptr),对吧?但是节点nullptr 不包含有关其left、right 和parent 数据的信息。那么我们如何从end() 中减少一个迭代器呢?以下是我到目前为止所拥有的(在iterator<T> 类中定义)。我的iterator<T> 类有node<T>* ptr 作为它唯一的数据成员,我的node<T> 类有成员T value; node *left, *right, *parent;。
iterator& operator--() {
// if (!ptr) what to do???
if (ptr->left)
ptr = node<T>::max_node(ptr->left);
else {
node<T>* previous = ptr;
ptr = ptr->parent;
while (ptr && ptr->left == previous) {
previous = ptr;
ptr = ptr->parent;
}
}
return *this;
}
【问题讨论】:
-
你回答了你自己的问题——如果你想能够递减(BidirectionIterator),那么显然
end()函数不能简单地返回nullptr,或者只包含一个nullptr的东西。相反,它必须返回一个指向某个标记的指针,该标记可以递减以指向最后一个元素。 -
Nullptr 如果你只想要一个不能递减的 ForwardIterator 就足够了。
标签: c++ pointers iterator binary-search-tree