将 ada.Containers.Vector 转换为数组

Bas*_*ond 3 arrays vector ada

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

type Integer_Array is array(Natural range <>) of Integer;
Run Code Online (Sandbox Code Playgroud)

并使用包 Ada.Containers.Vectors 作为

package Integer_Vectors is new Ada.Containers.Vectors(
    Element_Type => Integer,
    Index_Type => Natural);
use Integer_Vectors;
Run Code Online (Sandbox Code Playgroud)

我该如何实现以下功能?

function To_Integer_Array(V : Integer_Vectors.Vector) return Integer_Array;
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的

从概念上讲,这似乎很简单:

  1. Temp_Arr声明为容量为V.Length的Integer_Array
  2. 迭代V并将所有元素复制到Temp_Arr
  3. 返回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;
Run Code Online (Sandbox Code Playgroud)

这会抛出

expected type "Standard.Integer"
found type "Ada.Containers.Count_Type"
Run Code Online (Sandbox Code Playgroud)

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

有没有办法将 Ada.Containers.Count_Type 转换为 Standard.Integer?还有另一种方法可以从 Integer_Vector 创建 Integer_Array 吗?

Bas*_*ond 5

感谢布莱恩,该声明现在有效了。我的函数的正确实现如下所示:

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;
Run Code Online (Sandbox Code Playgroud)