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

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

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

最佳答案

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

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

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

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

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

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

关于c++ - 从 end() 函数返回的迭代器获取 BST 的最后一个节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29110643/

相关文章:

C++ 没有用于 list::erase 的匹配函数

c++ - g++ -std=c++11,标志没有生效

c++ - Fortran 中 REAL(KIND=real_normal) 的 C 等效类型是什么?

c++ - 错误C2676:std::set::const_iterator没有运算符+功能?

docker - 如何删除用于生产和复制的 Docker 卷?

sql - VB6 将字符串映射到标题的整数

linux - Docker 中的 Docker 无法挂载卷

c++ - 从函数返回 'local' char* 与从函数返回 'local' int* 之间的区别

c++ - IDA PRO 将 C++ 代码转换为 C 代码 __OFSUB__ 宏

java - 迭代对象列表并跳过一个索引并稍后再次读取它