如何在Ada中实现类似Java数组append的数组元素追加功能
Ada实现Integer数组追加元素的方案
Ada 标准的定长数组本身不支持动态追加元素,你可以通过以下两种方式实现需求,循环场景优先使用第一种方案:
方案1:使用标准库Vector容器(推荐)
Ada 官方提供了Ada.Containers.Vectors变长容器包,原生支持动态追加元素,也支持直接转为定长数组使用:
with Ada.Containers.Vectors; with Ada.Text_IO; use Ada.Text_IO; procedure Append_Demo is -- 实例化Integer类型对应的Vector包 package Int_Vectors is new Ada.Containers.Vectors (Index_Type => Natural, Element_Type => Integer); use Int_Vectors; -- 自定义Integer数组类型,按需定义即可 type Int_Array is array (Positive range <>) of Integer; V : Vector := Empty_Vector; Final_Arr : access Int_Array; begin -- 初始写入1、2 Append(V, 1); Append(V, 2); -- 循环追加逻辑示例,你可以把Append放到你自己的循环体中 Append(V, 3); -- 转为定长数组使用 Final_Arr := new Int_Array'(To_Array(V)); -- 验证输出:1 2 3 for Num of Final_Arr.all loop Put(Num'Image & " "); end loop; New_Line; end Append_Demo;
方案2:手动实现数组拼接(仅适合低频追加场景)
如果你不想引入容器,也可以手动封装数组追加函数,缺点是每次调用都会重新分配内存,循环次数多的话性能损耗较大:
-- 入参为原始数组和待追加元素,返回新的拼接后数组 function Append_Int(Original : Int_Array; New_Item : Integer) return Int_Array is begin return Result : Int_Array(Original'First .. Original'Last + 1) do Result(Original'Range) := Original; Result(Result'Last) := New_Item; end return; end Append_Int; -- 调用示例 -- A : Int_Array := (1, 2); -- B : Int_Array := Append_Int(A, 3); -- B的值为(1,2,3)
内容的提问来源于stack exchange,提问作者wang kom
相关产品推荐
相关产品推荐

