我很难理解end()函数的实现要求,它返回一个指向最后一个元素的迭代器。过去的最后一个元素是什么意思?是不是总是空?如果它没有信息,那么在end()的帮助下如何以O(1)时间复杂度到达BST的最终节点?
答案 0 :(得分:1)
" null"的概念元素等只是在迭代器语义中没有形成的东西。它毫无意义。迭代器不是原始C指针。
您可以设计迭代器,使得非空容器上的end()-1
返回最终节点,如果迭代器是bidirectional则开始。
对于前向迭代器的更一般情况,你真正希望的是某些迭代器等于end()
当它超过最后一个元素时,或者当没有元素时begin() == end()
。
有时可以通过end()
指向仅存在的特殊节点来促进end()
的功能。
迭代器可以存储一个布尔字段,表示它是否是end()
的结果。迭代器可以根据您的需要保存尽可能多的信息。降低数量是一种优化,但是可选的。
当然,没有人强迫你begin()
和end()
成为获取迭代器的唯一方法。