我满怀希望地输入with Ada.Containers.以查看自动完成列表,但没有看到Stack或列出任何类似的内容。Ada 标准库真的没有堆栈实现吗?
在 Rosetta Code 上,我发现了这个堆栈实现,它非常缺乏,因为它为每个添加的单个节点运行到分配器。
我觉得一定有一些我必须错过的“其他 Ada 标准库”,因为我不断遇到明显缺失的基本库功能。
我不相信我在 50 年的(主要是实时控制系统)编程中实际使用过堆栈。没有标准的部分原因Ada.Containers.Stacks可能是教育工作者会丢失初学者数据结构课程中的一个介绍性主题:-)
[it] 为 Ada 提供了许多有用的容器。只提供最有用的容器。相对容易编码的、冗余的或很少使用的从这个集合中省略,即使它们通常包含在容器库中
然后
您可以使用向量以传统方式实现堆栈:
package Stacks is new Ada.Containers.Vectors (ET);
use Stacks;
Stack : Stacks.Vector;
procedure Push (E : in ET) is
begin
Append (Stack, New_Item => E);
end;
function Top return ET is
begin
return Last_Element (Stack);
end;
procedure Pop is
begin
Delete_Last (Stack);
end;
Run Code Online (Sandbox Code Playgroud)
然后有机会创建有界堆栈并在适当时预先分配无界堆栈(即您知道典型的最大深度,但偶尔希望允许更深的)。