Ada 2012多路树,创建根节点
我正在使用多路树的有界版本。我可以创建我的元素类型并实例化我类型的树,但是如何创建根呢?我看到几种形式的插入式儿童。我所有使用Insert\u Child的尝试都失败了,因为我没有为父参数或Before参数使用任何\u元素 有人能给我举一个使用多路树包的例子吗Ada 2012多路树,创建根节点,ada,gnat,multiway-tree,Ada,Gnat,Multiway Tree,我正在使用多路树的有界版本。我可以创建我的元素类型并实例化我类型的树,但是如何创建根呢?我看到几种形式的插入式儿童。我所有使用Insert\u Child的尝试都失败了,因为我没有为父参数或Before参数使用任何\u元素 有人能给我举一个使用多路树包的例子吗 如果有必要的话,我正在使用Ada的免费Gnat版本。创建一个Tree类型的变量;手臂上有一个 有一个特殊的节点,根节点,它始终存在并具有 既不是关联的元素值,也不是任何父节点。根节点 提供将节点添加到其他空树的位置,并 表示树的底部 差不
如果有必要的话,我正在使用Ada的免费Gnat版本。创建一个
Tree
类型的变量;手臂上有一个
有一个特殊的节点,根节点,它始终存在并具有
既不是关联的元素值,也不是任何父节点。根节点
提供将节点添加到其他空树的位置,并
表示树的底部
差不多
with Ada.Containers.Multiway_Trees;
with Ada.Text_IO; use Ada.Text_IO;
procedure Mway is
package Trees is new Ada.Containers.Multiway_Trees (Integer);
T : Trees.Tree;
C : Trees.Cursor;
begin
C := T.Root;
T.Append_Child (Parent => C, New_Item => 1);
T.Append_Child (Parent => C, New_Item => 2);
for E of T loop
Put_Line (E'Img);
end loop;
end Mway;
其输出为
1
2
创建
树类型的变量
;手臂上有一个
有一个特殊的节点,根节点,它始终存在并具有
既不是关联的元素值,也不是任何父节点。根节点
提供将节点添加到其他空树的位置,并
表示树的底部
差不多
with Ada.Containers.Multiway_Trees;
with Ada.Text_IO; use Ada.Text_IO;
procedure Mway is
package Trees is new Ada.Containers.Multiway_Trees (Integer);
T : Trees.Tree;
C : Trees.Cursor;
begin
C := T.Root;
T.Append_Child (Parent => C, New_Item => 1);
T.Append_Child (Parent => C, New_Item => 2);
for E of T loop
Put_Line (E'Img);
end loop;
end Mway;
其输出为
1
2
谢谢你的回答,但是你对根没有元素的描述可能会导致我改变我的设计。我期望构建一个由子组件组成的组件树等等。我想将每个元素的属性(比如质量或价格)汇总到程序集的总数中,并将其存储在根目录中 我想我可以让我创建的第一个节点成为集合总数的占位符,然后让真正的树分支离开它。看起来笨拙但可行
/s/Bob谢谢您的回答,但是您对根没有元素的描述可能会导致我更改设计。我期望构建一个由子组件组成的组件树等等。我想将每个元素的属性(比如质量或价格)汇总到程序集的总数中,并将其存储在根目录中 我想我可以让我创建的第一个节点成为集合总数的占位符,然后让真正的树分支离开它。看起来笨拙但可行
/s/Bob有趣的是,当我尝试示例代码时,我在树迭代器循环中得到了一个存储错误 我在Linux的Windows子系统下运行Debian。WSL1不允许您通过ulimit调整堆栈大小 修复程序似乎是打开编译器优化:
ebolar@Beowulf:~/Build/Ada/src$ gnatmake -s -g simpletree
gcc-6 -c -g simpletree.adb
simpletree.adb:3:11: warning: file name does not match unit name, should be "mway.adb"
gnatbind-6 -x simpletree.ali
gnatlink-6 simpletree.ali -g
ebolar@Beowulf:~/Build/Ada/src$ ./simpletree
Load up the tree
Check out the contents
raised STORAGE_ERROR : stack overflow or erroneous memory access
ebolar@Beowulf:~/Build/Ada/src$ gnatmake -s -g -O simpletree
gcc-6 -c -g -O simpletree.adb
simpletree.adb:3:11: warning: file name does not match unit name, should be "mway.adb"
gnatbind-6 -x simpletree.ali
gnatlink-6 simpletree.ali -g -O
ebolar@Beowulf:~/Build/Ada/src$ ./simpletree
Load up the tree
Check out the contents
1
2
有趣的是,当我尝试示例代码时,我在树迭代器循环中得到了一个存储错误 我在Linux的Windows子系统下运行Debian。WSL1不允许您通过ulimit调整堆栈大小 修复程序似乎是打开编译器优化:
ebolar@Beowulf:~/Build/Ada/src$ gnatmake -s -g simpletree
gcc-6 -c -g simpletree.adb
simpletree.adb:3:11: warning: file name does not match unit name, should be "mway.adb"
gnatbind-6 -x simpletree.ali
gnatlink-6 simpletree.ali -g
ebolar@Beowulf:~/Build/Ada/src$ ./simpletree
Load up the tree
Check out the contents
raised STORAGE_ERROR : stack overflow or erroneous memory access
ebolar@Beowulf:~/Build/Ada/src$ gnatmake -s -g -O simpletree
gcc-6 -c -g -O simpletree.adb
simpletree.adb:3:11: warning: file name does not match unit name, should be "mway.adb"
gnatbind-6 -x simpletree.ali
gnatlink-6 simpletree.ali -g -O
ebolar@Beowulf:~/Build/Ada/src$ ./simpletree
Load up the tree
Check out the contents
1
2
是的,根函数是您的朋友
函数根(容器:Tree)返回游标代码>是,根函数是您的朋友函数根(容器:树)返回光标代码>