c++ - 在 VS2008 中可视化树

标签 c++ visual-studio-2008 tree visualization

我一直在为我们的一些类型添加可视化工具到 autoexp.dat。 即使是 that blog that everyone refers back对(甚至是微软的人!)这有时是一场斗争。

但我完全被#tree 可视化工具难住了。首先,该博客文章的描述似乎充满了漏洞(我没有找到其他 Material 可以找到地址 - 但其他人显然已经让它工作了)。特别是似乎有一些神奇的情况,它知道取消引用指针 - 但我不能确定我已经反向设计了意图。 使用 $c 和 $e 之间似乎也存在一些歧义。 AFAICS 它们似乎是可以互换的——也许两者都被允许作为可读性的帮助?或者它们真的意味着不同的东西(例如,那个博客使用 $e,而 VS2008 附带的 STL 可视化工具使用 $c)。

但真正缺少的是对它们如何组合在一起的解释。我会想象它会遵循这个过程:

  1. 应用“head”规则到达起始节点(通过指针)
  2. 将 deref 规则(末尾的位)应用于 dereferenced 当前节点以获得可视化值。
  3. 取消引用的当前节点应用左右规则以分别到达左右节点(通过指针 - 以 null 作为终止符,除非指定了跳过规则)。
  4. 转到 (2),直到访问完所有节点。

显然,我已经忽略了一种用于向左/向右导航的算法。这不是太重要。更重要的是在每个阶段考虑哪些值以及取消引用发生的时间。

这似乎是我能想象到的唯一符合我所见示例的过程。但我一直无法让它与我们的树实现一起工作。我只是得到(错误)应该显示#tree 子项的位置(我确实为每个节点得到一个(错误),所以我认为大小被正确捕获)。我已经尝试过我能想到的所有可能的变化 - 最多几次!

令我困惑的另一件事是我见过的许多示例,包括捆绑的 STL 示例,从头导航到父节点(或类似的),并跳过头节点。他们为什么这样做?

这是我正在使用的可视化工具(在我尝试过的一种形式中 - 名称已更改以保护 ... 公司):

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 中。

任何帮助将不胜感激。

最佳答案

我们开始真的真的需要这个!所以我开了一个赏金,但我自己继续看。

看来我已经解决了! (就我而言)。我其实很接近:

MyTree<*,*,*>{
    children(
        #(
            [raw members]: [$c,!],
            #tree
            (
                head : $c.m_root.m_p,
                size : $c.m_size,
                left : left,
                right : right
            ) : $e.value
        )
    )
}

诀窍在于,head 规则需要完全指定如何在智能指针中获取原始指针,但 left/right 规则不需要(de-ref 规则也不需要)。

关于c++ - 在 VS2008 中可视化树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11377256/

相关文章:

时间:2019-05-17 标签:c++variadicfunction: What is the best way to replace?

c++ - 如何从模板类的方法返回 std::string,无论类型如何?

c++ - 程序因未知原因退出 (0xC0000005)

python - C++ 中足够大的 ProblemSize 需要 0 运行时间

visual-studio - 使用 Visual Studio 进行跨解决方案调试

visual-studio-2008 - 为什么 VS 2008 不支持 J#,这种语言已经死了吗?

visual-studio-2008 - 我的合作伙伴的visual studio express 与vs 2008

python - 字典叶生成器

从数组创建一个未排序的二叉树(这将像一个堆,即按顺序存储但未排序)

data-structures - 一棵树的左子,右兄弟是什么?你为什么要使用它?