C++ 删除树的节点
我有一个关于Boost Spirit库生成的抽象语法树的问题 我在二叉搜索树中找到了许多关于删除节点和子树的信息,但在AST中找不到相同的信息。在AS树中有一个节点,这个节点是完整树的子树的根。现在我想删除节点及其所有子节点 我不知道怎么做,Boost Spirit文档也没有帮助 有人给我一些提示吗 生成树时使用(Boost 1.46.1):C++ 删除树的节点,c++,tree,boost-spirit,C++,Tree,Boost Spirit,我有一个关于Boost Spirit库生成的抽象语法树的问题 我在二叉搜索树中找到了许多关于删除节点和子树的信息,但在AST中找不到相同的信息。在AS树中有一个节点,这个节点是完整树的子树的根。现在我想删除节点及其所有子节点 我不知道怎么做,Boost Spirit文档也没有帮助 有人给我一些提示吗 生成树时使用(Boost 1.46.1): tree\u parse\u info=ast\u parse(expression.c\u str(),parser,skipparser) 表达式是这
tree\u parse\u info=ast\u parse(expression.c\u str(),parser,skipparser)代码>
表达式是这样的:
(变量_17或变量_18)和函数(变量_17)您能给出一个?如果你能展示一个AST,我可以告诉你。AST在Spirit中是用户定义的,所以它实际上就是如何处理该类型,而不管Spirit如何;通过(重新)设置成员。@sehe查看邮件列表,他正在使用Spirit Classic。他使用的AST是由库提供的树解析信息。我完全没有这方面的经验。我补充了一些信息。我想我可以删除它或类似的东西,确实删除了节点,但没有成功。@cv\u和\u-he哦,呵呵。我也看到了那篇文章,但我甚至没有认出API是Spirit V1:/@user2791904info。树和子树在默认情况下似乎是std::vector
。我想如果你小心迭代失效,你可以使用擦除-删除习惯用法。如果您为树定义BOOST\u SPIRIT\u USE\u LIST\u
容器将是std::LIST
,您可以简单地使用info.TREES.erase(冗余迭代器)
或tree\u it->children.erase(冗余迭代器)
。我认为这是正确的,但我无法知道这一点,因为你没有提供一个例子,我们可以像他建议的那样进行实验。