从end()函数返回的迭代器中获取BST的最后一个节点?

时间:2015-03-17 22:06:49

标签: c++ iterator containers binary-search-tree

我很难理解end()函数的实现要求,它返回一个指向最后一个元素的迭代器。过去的最后一个元素是什么意思?是不是总是空?如果它没有信息,那么在end()的帮助下如何以O(1)时间复杂度到达BST的最终节点?

1 个答案:

答案 0 :(得分:1)

" null"的概念元素等只是在迭代器语义中没有形成的东西。它毫无意义。迭代器不是原始C指针。

您可以设计迭代器,使得非空容器上的end()-1返回最终节点,如果迭代器是bidirectional则开始。

对于前向迭代器的更一般情况,你真正希望的是某些迭代器等于end()当它超过最后一个元素时,或者当没有元素时begin() == end()

有时可以通过end()指向仅存在的特殊节点来促进end()的功能。

迭代器可以存储一个布尔字段,表示它是否是end()的结果。迭代器可以根据您的需要保存尽可能多的信息。降低数量是一种优化,但是可选的。

当然,没有人强迫你begin()end()成为获取迭代器的唯一方法。