集合数据结构中的 end() 迭代器应该返回什么
What are end() iterators in a set data structure supposed to return?
这确实是编程硬件,但我不是要求代码,而是当我调用迭代器函数end()时,我应该返回什么?最大值/最右边的集合节点?
我相信对于begin(),我们只是获取root的迭代器,对,因为它是我们输入的第一件事。
同样对于此集合数据结构迭代器中的运算符++,我们只是根据从根开始的树的遍历来增加迭代器?
感谢您的帮助。
传统上,end()
返回结构末尾的一次。否则,您将无法使用current != end()
循环遍历整个结构。std::vector 就是这种情况,但是迭代器对于更复杂的数据结构更复杂。但是,您应该始终能够通过在迭代器上使用指向可迭代结构中的最后一个元素的operator++
来获取end()
。
不能取消引用 end()
元素,这通常是未定义的行为。
如果您自己实现数据结构,则可以决定end()
的含义。它必须是正确类型的迭代器,并且是可以与将普通迭代器递增到集合中最后一个元素之外的结果匹配的值。由于集合中的迭代器是双向的,因此返回的特定值需要能够遍历到集合中的前一个值。
一种常见的方法是在容器中使用哨兵节点,该节点保存指向数据结构中第一个和最后一个元素的指针,并使用对该节点(没有正确值)的迭代器作为end()
迭代器。
在begin()
的情况下,它不表示树根的值,而是最小的值,因此它将是树中最左边的节点。
相关文章:
- 使用 map<char,strring> 的迭代器返回指针 map<char,strring>*
- 如何从高性能的输入迭代器返回变体?
- 如何为迭代器返回"null"值?
- 将迭代器返回到向量的函数
- 迭代器返回 vector::begin()
- 访问对向量以使用迭代器返回
- 获取迭代器返回的字符串的大小()
- 如何让Lua迭代器返回C结构
- 迭代器返回最后一个元素上的"Junk"
- 指向矢量迭代器返回值的指针
- 使用迭代器返回对字符串的引用
- 如何将指针作为迭代器返回
- 将迭代器返回到多映射中最接近指定时间的时间
- 通过迭代器返回set对象的地址
- 从迭代器返回一个std::list元素的引用
- 为我的向量包装器和迭代器返回'begin'和'end'函数返回什么?
- c++迭代器返回类型
- 从取消引用的迭代器返回 std::map<std::string, int> 时出现巨大的内存泄漏
- 迭代器返回垃圾
- 通过不使用模板的迭代器返回std::list