我一直在爲autoexp.dat添加一些可視化器。 即使有that blog that everyone refers back(甚至微軟的人!),這有時是一個鬥爭。在VS2008中可視化樹木
但是我完全被#tree可視化器難住了。首先,博客文章似乎在其描述中充滿了漏洞(並且沒有其他材料能夠找到地址 - 但其他人明確知道它的工作原理)。特別是,似乎有一些神奇的情況下,它知道取消引用一個指針 - 但我不能確定我已經扭轉了這個意圖。 當你使用$ c和$ e時,似乎也有一些含糊之處。 AFAICS它們似乎是可以互換的 - 可能兩者都可以作爲可讀性的輔助手段?或者他們真的意味着不同的東西(例如,博客使用$ e,VS2008附帶的stl可視化工具使用$ c)。
但真正缺失的是如何將它們融合在一起的解釋。我會想到它會遵循這個過程:
- 應用「頭」的規則去的開始節點(通過指針)
- 應用DEREF規則(在末尾位)來取消引用的當前節點獲取可視化的值。
- 將左右規則應用於取消引用的當前節點以分別到達左側和右側節點(通過指針 - 以null作爲終止符,除非指定跳過規則)。
- 轉到(2),直到所有節點都被訪問過。
顯然有一個算法左右導航,我已經掩蓋了。這並不重要。更重要的是在每個階段以及何時解除引用時考慮哪些值。
這似乎是我可以想象的唯一一個適合我見過的例子的過程。但是我一直無法讓它與我們的樹實現一起工作。我只是得到(錯誤)應顯示#tree子項的位置(每個節點我都得到一個(錯誤),所以我認爲正確捕獲了大小)。我嘗試過任何可能的變化,我可以想到 - 最多次!
另一件讓我感到困惑的事情是,我見過的很多例子,包括捆綁的stl,從頭到尾(或類似)導航,並跳過頭節點。他們爲什麼這樣做?
下面是我使用Visualiser的(在我試過的形式之一 - 和名稱已更改爲保護...企業):
MyTree<*,*,*>{
children(
#(
[raw members]: [$c,!],
#tree
(
head : $c.m_root.m_p,
size : $c.m_size,
left : left.m_p,
right : right.m_p
) : $e.value
)
)
}
下面是一些僞代碼對於我的樹類:
MyTree:
Ptr<Note> m_root
int m_size
Node:
ValueT value
Ptr<Node> left
Ptr<Node> right
...其中PTR <>是一個智能指針,拿在M_P原始指針。
任何幫助將不勝感激。
其中的一些可能只適用於他們進行測試的MS設計。就像那些有哨兵節點的人一樣(他們可以跳過)。我有類似的問題試圖適應鏈接列表設計偏離原來的。沒有那個運氣。 – 2012-07-07 17:52:01
我沒有哨兵節點 - 所以它應該*更容易*,我會想。在大多數方面,我看起來更像virtualdub示例 - 最大的區別是我使用智能指針。 – philsquared 2012-07-07 18:01:55