将 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;
我目前有什么
从概念上看,似乎真的很简单:
- 将Temp_Arr声明为Integer_Array,容量为V.Length
- 遍历 V 并将所有元素复制到 Temp_Arr
- 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;
如果我定义了一个数组类型
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;
我目前有什么
从概念上看,似乎真的很简单:
- 将Temp_Arr声明为Integer_Array,容量为V.Length
- 遍历 V 并将所有元素复制到 Temp_Arr
- 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;