从 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()
是获取迭代器的唯一可用方法。
我很难理解 end() 函数的实现要求,该函数 returns 一个指向最后一个元素的迭代器。过去的最后一个元素是什么意思?它不会总是为空吗?如果它不包含任何信息,那么我如何在 end() 的帮助下以 O(1) 的时间复杂度到达 BST 的最终节点?
"null" 元素等的概念在迭代器语义中根本不存在。从字面上看是没有意义的。迭代器不是原始 C 指针。
你要设计你的迭代器,这样 end()-1
在非空容器上 returns 最终节点,如果迭代器是 bidirectional 开始的话。
对于前向迭代器的更一般情况,您真正希望的是 some 迭代器在最后一个元素递增后等于 end()
,或 begin() == end()
当没有元素时。
这有时是通过让 end()
指向一个特殊节点来完成的,该节点的存在只是为了促进 end()
的功能。
例如,迭代器可以存储一个布尔字段,指示它是否是 end()
的结果。迭代器可以保存任意多的信息。这是一种降低该数量的优化,但它是一个可选的。
当然,没有人强迫您,因为 begin()
和 end()
是获取迭代器的唯一可用方法。