这确实是编程硬件,但我不是要求代码,而是当我调用迭代器函数end()时我想要返回什么?最大值/最右设置节点?
我相信对于begin(),我们只是获取root的迭代器,对,因为它是我们输入的第一件事。
对于这个Set Data Structure迭代器中的operator ++,我们只是根据从root开始的遍历来递增迭代器?
感谢帮助。
答案 0 :(得分:3)
传统上end()
返回结构的末尾。否则,您将无法使用current != end()
循环遍历整个结构。这是std :: vector的情况,但是对于更复杂的数据结构,迭代器更复杂。但是你应该总是能够通过在迭代器上使用end()
来获得operator++
,该迭代器指向可迭代结构中的最后一个元素。
您不能取消引用end()
元素,这通常是未定义的行为。
答案 1 :(得分:0)
如果您自己实施数据结构,则可以决定end()
的含义。它必须是正确类型的迭代器,并且值可以与将正常迭代器递增到集合中最后一个元素之外的结果相匹配。因为集合中的迭代器是双向的,所以返回的特定值需要能够走到集合中的先前值。
一种常见的方法是在容器中使用一个sentry节点,该节点包含指向数据结构中第一个和最后一个元素的指针,并使用一个迭代器进入该节点(不具有正确的值)作为{{ 1}}迭代器。
在end()
的情况下,它不代表树根的值,而是最小值,因此它将是树中最左边的节点。