【发布时间】:2017-11-14 11:07:40
【问题描述】:
这确实是编程硬件,但我不是要代码,而是当我调用迭代器函数 end() 时我想返回什么?最大值/Right-Most 设置节点?
我相信对于 begin(),我们只是获取 root 的迭代器,对,因为它是我们输入的第一件事。
同样对于这个Set Data Structure迭代器中的operator++,我们只是根据从根开始遍历树来递增迭代器?
感谢您的帮助。
【问题讨论】:
-
好吧,在你调用
++的次数足够多之后,begin()会有什么价值? -
它返回引用结构“结束后的一个”元素的内容。所以如果一个迭代器等于这个
end()元素,它是无效的 -
begin()forstd::set返回一个指向最小元素而不是根的迭代器,++it指向该元素的后继元素。 -
@JoshG79: 迭代器 not 无效,无法取消引用,但它是 有效 迭代器。
-
所以基本上,C.R.,begin() 从最左边的节点开始(因为那将是最小值),然后使用 ++ 运算符相应地遍历树到树的末尾,然后传递最后一个节点迭代器到最后(哪个在最大的已知值之后)?因此节点结构将保留一个数据成员“父级”,以便它可以返回树以便更容易遍历。一旦它到达 null 父级,那会假设它是根并找到一次通过的最大值?但我在 c++ 参考站点注意到,这些操作应该是 O(1)。所以,我一定是哪里错了。