Ada 有标准的堆栈实现吗?

Tam*_*inn 1 ada

我满怀希望地输入with Ada.Containers.以查看自动完成列表,但没有看到Stack或列出任何类似的内容。Ada 标准库真的没有堆栈实现吗?

在 Rosetta Code 上,我发现了这个堆栈实现,它非常缺乏,因为它为每个添加的单个节点运行到分配器。

我觉得一定有一些我必须错过的“其他 Ada 标准库”,因为我不断遇到明显缺失的基本库功能。

Sim*_*ght 6

我不相信我在 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)

然后有机会创建有界堆栈并在适当时预先分配无界堆栈(即您知道典型的最大深度,但偶尔希望允许更深的)。