Delphi 2009 泛型容器单元(Generics.Collections)[2]: TQueue<T>


本文整理自网络,侵删。

 
TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出.

TQueue 主要有三个方法、一个属性:
Enqueue(入列)、Dequeue(出列)、Peek(查看下一个要出列的元素);
Count(元素总数).

本例效果图:

代码文件:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses Generics.Collections; {Delphi 2009 新增的泛型容器单元}

type
  TRec = record
    Name: string;
    Age: Word;
  end;

var
  Queue: TQueue<TRec>;  {定义一个泛型 TQueue 类, 这指定了要用于上面定义的 TRec 记录}

{建立}
procedure TForm1.FormCreate(Sender: TObject);
begin
  Queue := TQueue<TRec>.Create;

  Memo1.Clear;
  Button1.Caption := Button1.Caption + ' 入列';
  Button2.Caption := Button2.Caption + ' 出列';
  Button3.Caption := Button3.Caption + ' 下一个出列的...';
end;

{释放}
procedure TForm1.FormDestroy(Sender: TObject);
begin
  Queue.Free;
end;

{入列: Enqueue}
procedure TForm1.Button1Click(Sender: TObject);
var
  rec: TRec;
begin
  rec.Name := StringOfChar(Char(65 + Random(26)), 3);
  rec.Age := Random(150);
  Queue.Enqueue(rec);
  Text := Format('当前队列成员总数: %d', [Queue.Count]);

  {让 Memo1 配合显示}
  Memo1.Lines.Add(Format('%s, %d', [rec.Name, rec.Age]));
end;

{出列: Dequeue}
procedure TForm1.Button2Click(Sender: TObject);
var
  rec: TRec;
begin
  if Queue.Count = 0 then Exit;
  rec := Queue.Dequeue;
  ShowMessage(Format('%s, %d', [rec.Name, rec.Age]));
  Text := Format('当前队列成员总数: %d', [Queue.Count]);

  {让 Memo1 配合显示}
  Memo1.Lines.Delete(0);
end;

{下一个出列的元素: Peek}
procedure TForm1.Button3Click(Sender: TObject);
var
  rec: TRec;
begin
  if Queue.Count = 0 then Exit;
  rec := Queue.Peek;
  ShowMessage(Format('%s, %d', [rec.Name, rec.Age]));
end;

end.


相关阅读 >>

Delphi 调用驱动

Delphi中查找进程及强行结束进程的方法

Delphi异常信息捕捉

Delphi 屏幕截屏

Delphi api屏幕传输算法

Delphi使用xmlhttp组件代码

Delphi tfilestream 的读写 合并文件

Delphi 数组与枚举

Delphi图像匹配算法

Delphi tnethttpcleint提交json串

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...