繁体   English   中英

如何创建一个过去的迭代器?

[英]How to create a past-the-end iterator?

我已经创建了一个二叉树结构来存储一个有界的卷层次结构,以便更容易使用(更安全)我创建了两个迭代器来补充它:广度优先和深度优先。

广度优先迭代器本质上是底层QList的包装器。 但我坚持深度优先迭代器(仅双向),我可以处理树周围的实际迭代,我只是不知道如何创建一个过去的迭代器。

我不能只使用QList::end()因为不能保证最低级别的最右边节点也是整个树的最右边节点。 我不愿意制作一个可以测试的'假'BVH节点,因为它会涉及大量的代码更改(可能是开销),让各种节点管理机制忽略假节点,并禁用很多树构建自动化(例如,假节点的父节点必须被告知它是叶子)。 但如果这是唯一的方法 - 那么这是唯一的方法。

简要地看了一下qlist.h,看来你将无法对两种迭代类型使用相同的end()。 但是没关系 - 你可以使用空指针或静态虚拟或其他技术为你的第二个迭代方法创建一个end()迭代器。 我不明白为什么这会影响大量的其他代码(大多数代码应该只是引用end()而不知道它的实现细节)。

你能不能只使用null或类似的东西作为结束? 这至少是我期望的,例如链表结构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM