将 ada.Containers.Vector 转换为数组

Convert ada.Containers.Vector to array

如果我定义了一个数组类型

type Integer_Array is array(Natural range <>) of Integer;

并且还使用包 Ada.Containers.Vectors 作为

package Integer_Vectors is new Ada.Containers.Vectors(
    Element_Type => Integer,
    Index_Type => Natural);
use Integer_Vectors;

如何实现以下功能?

function To_Integer_Array(V : Integer_Vectors.Vector) return Integer_Array;

我目前有什么

从概念上看,似乎真的很简单:

  1. Temp_Arr声明为Integer_Array,容量为V.Length
  2. 遍历 V 并将所有元素复制到 Temp_Arr
  3. Return Temp_Arr

第 1 步让我很头疼。我试过:

function To_Integer_Array(V: Integer_Vectors.Vector) return Integer_Array is
    Temp_Arr: Integer_Array(1..V.Length);
begin
    -- Todo: copy values here
    return Temp_Arr;
end To_Integer_Array;

这会抛出

expected type "Standard.Integer"
found type "Ada.Containers.Count_Type"

虽然错误绝对有道理,但我不确定如何解决它。

有没有办法把Ada.Containers.Count_Type转换成Standard.Integer? 是否有另一种方法可以从 Integer_Vector 创建一个 Integer_Array?

感谢 Brian,声明现在可以使用了。我的函数的正确实现如下所示:

function To_Integer_Array(V: Integer_Vector) return Integer_Array is
    Temp_Arr: Integer_Array(1..Natural(V.Length));
begin
    for I in Temp_Arr'Range loop
        Temp_Arr(I) := V.Element(I);
    end loop;
    return Temp_Arr;
end To_Integer_Array;