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

Obtaining last node of BST from an iterator returned by end() function?

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

"null" 元素等的概念在迭代器语义中根本不存在。从字面上看是没有意义的。迭代器不是原始 C 指针。

你要设计你的迭代器,这样 end()-1 在非空容器上 returns 最终节点,如果迭代器是 bidirectional 开始的话。

对于前向迭代器的更一般情况,您真正希望的是 some 迭代器在最后一个元素递增后等于 end(),或 begin() == end() 当没有元素时。

这有时是通过让 end() 指向一个特殊节点来完成的,该节点的存在只是为了促进 end() 的功能。

例如,迭代器可以存储一个布尔字段,指示它是否是 end() 的结果。迭代器可以保存任意多的信息。这是一种降低该数量的优化,但它是一个可选的。

当然,没有人强迫您,因为 begin()end() 是获取迭代器的唯一可用方法。