簡體   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