我使用'Indefinite_Doubly_Linked_Lists'列表在Ada中编写了一堆通用数字。
Pop& push操作是使用append和delete_last实现的,但是对于排序方法,我需要访问列表中的各个项目。
我确实只使用append / prepend delete_last / first来计算排序方法,但结果远非优雅(可能不正确)
procedure sort is
elem1: Item;
elem2: Item;
--l is a package-private Indefinite_Doubly_linked_lists'
begin
if Integer(MyList.Length(l)) > 1 then
for i in 0 .. Integer(MyList.Length(l))-1 loop
for j in 0 .. Integer(MyList.Length(l))-1 loop
--Inner sort loop
elem1 := MyList.Element(l.first);
l.Delete_First;
elem2 := MyList.Element(l.first);
l.Delete_First;
if elem1>elem2 then
l.Prepend(elem1);
l.Append(elem2);
else
l.Prepend(elem2);
l.Append(elem1);
end if;
end loop;
end loop;
end if;
end;
如何从泛型类型列表中访问单个元素(或迭代)?
答案 0 :(得分:4)
一些事情:
除非你的练习是写一个排序,你可以......呃...使用通用排序:
package List_Sort is new MyList.Generic_Sorting;
如果您使用的是Ada 2012编译器,generalized looping可让您轻松访问每个元素:
procedure Iterate is
begin
for Elem of L loop
Put_Line(Item'Image(Elem));
end loop;
end Iterate;
如果你没有使用Ada 2012,你可以自己使用游标:
procedure Cursor_Iterate is
C : MyList.Cursor := L.First;
use type MyList.Cursor;
begin
loop
exit when C = MyList.No_Element;
Put_Line(Item'Image(MyList.Element(C)));
MyList.Next(C);
end loop;
end Cursor_Iterate;
或使用MyList的迭代程序:
procedure Iterate
(Container : in List;
Process : not null access procedure (Position : in Cursor));