四、Delphi 2009 泛型容器单元(Generics.Collections)[3]: TStack<T>

摘要:
TQueue和TStack:一个是队列列表,另一个是堆栈列表;一种是先进先出,另一种是先入后出,TStack主要有三种方法和一种属性:Push、Pop和Peek;计数(元素总数)。pasunitUnit1;界面使用Windows、消息、系统、变量、类、图形、控件、F

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

TStack 主要有三个方法、一个属性:
Push(压栈)、Pop(出栈)、Peek(查看下一个要出栈的元素);
Count(元素总数).

四、Delphi 2009 泛型容器单元(Generics.Collections)[3]: TStack<T>第1张

四、Delphi 2009 泛型容器单元(Generics.Collections)[3]: TStack<T>第2张四、Delphi 2009 泛型容器单元(Generics.Collections)[3]: TStack<T>第3张pas
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
  Stack: TStack
<TRec>;  {定义一个泛型 TStack 类, 这指定了要用于上面定义的 TRec 记录}

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

  Memo1.Clear;
  Button1.Caption :
= Button1.Caption + ' 压栈';
  Button2.Caption :
= Button2.Caption + ' 出栈';
  Button3.Caption :
= Button3.Caption + ' 下一个出栈的四、Delphi 2009 泛型容器单元(Generics.Collections)[3]: TStack&lt;T&gt;第4张';
end;

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

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

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

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

  
{让 Memo1 配合显示}
  Memo1.Lines.Delete(Memo1.Lines.Count 
- 1);
end;

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

end.
四、Delphi 2009 泛型容器单元(Generics.Collections)[3]: TStack&lt;T&gt;第5张四、Delphi 2009 泛型容器单元(Generics.Collections)[3]: TStack&lt;T&gt;第6张dfm
object Form1: TForm1
  Left 
= 0
  Top 
= 0
  Caption 
= 'Form1'
  ClientHeight 
= 147
  ClientWidth 
= 284
  Color 
= clBtnFace
  Font.Charset 
= DEFAULT_CHARSET
  Font.Color 
= clWindowText
  Font.Height 
= -11
  Font.Name 
= 'Tahoma'
  Font.Style 
= []
  OldCreateOrder 
= False
  Position 
= poDesktopCenter
  OnCreate 
= FormCreate
  OnDestroy 
= FormDestroy
  PixelsPerInch 
= 96
  TextHeight 
= 13
  
object Memo1: TMemo
    Left 
= 0
    Top 
= 0
    Width 
= 121
    Height 
= 147
    Align 
= alLeft
    Font.Charset 
= DEFAULT_CHARSET
    Font.Color 
= clWindowText
    Font.Height 
= -13
    Font.Name 
= 'Courier New'
    Font.Style 
= []
    Lines.Strings 
= (
      
'Memo1')
    ParentFont 
= False
    ScrollBars 
= ssBoth
    TabOrder 
= 0
  
end
  
object Button1: TButton
    Left 
= 127
    Top 
= 21
    Width 
= 146
    Height 
= 25
    Caption 
= 'Button1'
    TabOrder 
= 1
    OnClick 
= Button1Click
  
end
  
object Button2: TButton
    Left 
= 127
    Top 
= 61
    Width 
= 146
    Height 
= 25
    Caption 
= 'Button2'
    TabOrder 
= 2
    OnClick 
= Button2Click
  
end
  
object Button3: TButton
    Left 
= 127
    Top 
= 99
    Width 
= 146
    Height 
= 25
    Caption 
= 'Button3'
    TabOrder 
= 3
    OnClick 
= Button3Click
  
end
end

免责声明:文章转载自《四、Delphi 2009 泛型容器单元(Generics.Collections)[3]: TStack&amp;lt;T&amp;gt;》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇XML文件与实体类的互相转换ELK华为云的镜像下载地址(ElasticSearch,logstash,kibana)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#2.0泛型-Dictionary,List的用法

泛型最常见的用途是创建集合类。 .NETFramework类库在System.Collections.Generic命名空间中包含几个新的泛型集合类。应尽可能地使用这些类来代替普通的类,如System.Collections命名空间中的ArrayList,HashTable等。 下面我们就来说下,几个泛型集合类的用法: 一.Dictionary 此类在.N...

delphi hook alt+F4 ctrl+delete+alt win键等

unit uHook;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, Dialogs,  StdCtrls;type  tagKBDLLHOOKSTRUCT = packed record    vkCode: DWORD;    scanCod...

delphi Drag and Drop sample 鼠标拖放操作实例

Drag and Drop is a common operation that makes the interface user friendly: a user can drag/drop information to controls instead of having to type etc. The following sample explai...

delphi 怎么将一个文件流转换成字符串(String到流,String到文件,相互转化)

//from http://kingron.myetang.com/zsfunc0d.htm (*// 标题:充分利用pascal字符串类型 说明:和PChar不同,string可以保存#0字符在其中;示例文件、内存流字符串之间转换 设计:Zswang 日期:2002-01-25 支持:wjhu111@21cn.com //*) ///////Begin...

delphi XE 和 RAD studio有什么区别

RAD 是Rapid Application Development 的缩写,意为 快速应用开发,RAD 是由计算机顾问和作家James Martin于1991年最早提出的,是一种试图快速生成系统而不会牺牲bai质量的结构化开发方法。 RAD studio :快速应用开发工作室。 常用的RAD工具有:Visual Studio、RAD studio等。 d...

Delphi与各数据库数据类型比较

Delphi数据类型与各数据库数据类型对比如下表,如有具体说明见表中脚注: DelphiType OracleTypes SQLServerTypes MySQLTypes[1] InterBaseTypes PostgreSQLTypes SQLiteTypes ftSmallint NUMBER(p,0)[2](p<5) SMALLINT...