集合数据结构中的 end() 迭代器应该返回什么

What are end() iterators in a set data structure supposed to return?

本文关键字:迭代器 返回 什么 数据结构 end 集合      更新时间:2023-10-16

这确实是编程硬件,但我不是要求代码,而是当我调用迭代器函数end()时,我应该返回什么?最大值/最右边的集合节点?

我相信对于begin(),我们只是获取root的迭代器,对,因为它是我们输入的第一件事。

同样对于此集合数据结构迭代器中的运算符++,我们只是根据从根开始的树的遍历来增加迭代器?

感谢您的帮助。

传统上,end()返回结构末尾的一次。否则,您将无法使用current != end()循环遍历整个结构。std::vector 就是这种情况,但是迭代器对于更复杂的数据结构更复杂。但是,您应该始终能够通过在迭代器上使用指向可迭代结构中的最后一个元素的operator++来获取end()

不能取消引用 end() 元素,这通常是未定义的行为。

如果您自己实现数据结构,则可以决定end()的含义。它必须是正确类型的迭代器,并且是可以与将普通迭代器递增到集合中最后一个元素之外的结果匹配的值。由于集合中的迭代器是双向的,因此返回的特定值需要能够遍历到集合中的前一个值。

一种常见的方法是在容器中使用哨兵节点,该节点保存指向数据结构中第一个和最后一个元素的指针,并使用对该节点(没有正确值)的迭代器作为end()迭代器。

begin()的情况下,它不表示树根的值,而是最小的值,因此它将是树中最左边的节点。