Delphi容器类之---TOrderedList、TStack、TQueue、TObjectStack、TObjectQueue的使用

TOrderedList、TStack、TQueue        

  Contnrs单元还定义了其他三个类:TOrderedList、TStack、TQueue

TOrderedList

TOrderedList = class(TObject)
private
    FList: TList;
protected
    procedure PushItem(AItem: Pointer); virtual; abstract;
    ...
public
    function Count: Integer;
    function AtLeast(ACount: Integer): Boolean;
    procedure Push(AItem: Pointer);
    function Pop: Pointer;
    function Peek: Pointer;
end;

TStack

TStack = class(TOrderedList)
protected
    procedure PushItem(AItem: Pointer); override;
end;

TQueue

TQueue = class(TOrderedList)
protected
    procedure PushItem(AItem: Pointer); override;
end;

  

  要注意,虽然TOrderedList并不是从TList继承的,但是它在内部的实现时,使用了TList来存储指针。另外注意TOrderedList类的 PushItem过程是一个臭抽象过程,所以我们无法实例化TOrderList 类,而应该从TOrderList继承新的类,并实现抽象的PushItem 方法。

  因此TStack、TQueue继承自TOrderedList,所以TStack、TQueue的指针也是存在其内部的TList中的。

  TStack和TQueue正是实现了PushItem 抽象方法的类,我们可以实例化TStack和TQueue类作为后进先出的堆栈(LIFO)和先进先出的队列(FIFO)。下面是这两个类的方法的使用说明:

  • Count  返回列表中的项目数。
  • AtLeast  可以用来检检查链表的大小,判断当前列表中的指针数目是否大于传递的参数值,如果为True便是列表中的项目数大于传来的参数。
  • Push  对于TStack类,Push方法将指针添加到链表的最后,对于TQueue类,Push方法则将指针插入到链表的开始。
  • Pop  返回链表的末端指针,并将其从链表中删除。
  • Peek  返回链表的末端指针,但是不将其从链表中删除。

TObjectStack、TObjectQueue         

  Contnrs单元中最后两个类是TObjectStack和TObjectQueue类,类的定义如下

TObjectStack

TObjectStack = class(TStack)
public
    procedure Push(AObject: TObject);
    function Pop: TObject;
    function Peek: TObject;
end;

TObjectQueue

TObjectQueue = class(TQueue)
public
    procedure Push(AObject: TObject);
    function Pop: TObject;
    function Peek: TObject;
end;

  这两个类只是TStack和TQueue 类的简单扩展,在链表中保存的是TObject的对象引用,而不是简单的指针。

时间: 2024-10-15 20:41:46

Delphi容器类之---TOrderedList、TStack、TQueue、TObjectStack、TObjectQueue的使用的相关文章

Delphi容器类之---TList、TObjectList、TComponentList、TClassList的使用

转载自:http://blog.csdn.net/iseekcode/article/details/4922001 从Delphi5开始VCL中增加了新的Contnrs单元,单元中定义了8个新的类,全部都是基于标准的TList类. TList TList类实际上就是一个可以存储指针的容器类,提供了一系列的方法和属性来增加.删除.重排.定位.存取和排序容器中的类,它是基于数组的机制来实现的容器,比较类似于C++中的Vector和Java中的ArrayList. TList经常用来保存一组对象列表

Delphi中的容器类

从Delphi 5开始VCL中增加了一个新的Contnrs单元,单元中定义了8个新的类,全部都是基于标准的TList 类. TList 类 TList 类实际上就是一个可以存储指针的容器类,提供了一系列的方法和属性来添加,删除,重排,定位,存取和排序容器中的类,它是基于数组的机制来实现的容器,比较类似于C++中的Vector和Java中的 ArrayList,TList 经常用来保存一组对象列表,基于数组实现的机制使得用下标存取容器中的对象非常快,但是随着容器中的对象的增多,插入和删除对象速度会

delphi.数据结构.链表

链表作为一种基础的数据结构,用途甚广,估计大家都用过.链表有几种,常用的是:单链表及双链表,还有N链表,本文着重单/双链表,至于N链表...不经常用,没法说出一二三来. 在D里面,可能会用Contnrs.pas.TStack/TQueue相关类,进行操作,不过里面的实现,并非使用的是链表实现,只是用TList,然后...实现的. 呵,TList怎么实现那些不是重点,本文着重是说一下自己使用链表的一些心得. 一:单链表: 单链表的用途,主要一个场景:队列(stack/queue),两者区别在于:s

System 这四个单元多用用(近期)

参考:https://www.cnblogs.com/xumenger/p/4687493.html System.Classes.pas: TList.TStrings.TStringList System.Contnrs.pas: TObjectList. TComponentList.TClassList.TOrderedList. TStack.TObjectStack. TQueue.TObjectQueue. TCustomBucketList System.Generics.Col

delphi 各新版本特性收集

delphi 各新版本特性收集 Delphi XE6新增了一些特性并增强了原有的功能,主要有以下几个方面: IDE(整合开发环境) Internet XML(扩展标记语言) Compiler(编译器) COM/Active X Database support(数据库支持) CORBA Actions(动作) Custom Variants(可定义的可变类型) VCL 单元和特性 RTL单元和特性 Cross-platform development(跨平台开发) Translation too

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

Delphi 2009 新增了泛型容器单元: Generics.Collections, 同时还有一个 Generics.Defaults 单元做支持. Generics.Collections 包含了以下实用类:TList<T>TQueue<T>TStack<T>TDictionary<TKey,TValue>TObjectList<T>TObjectQueue<T>TObjectStack<T>TObjectDicti

泛型容器单元(Generics.Collections)[2]: TQueue&lt;T&gt; 队列列表

TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出. TQueue 主要有三个方法.一个属性:Enqueue(入列).Dequeue(出列).Peek(查看下一个要出列的元素);Count(元素总数). 本例效果图: 代码文件: unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dia

泛型容器单元(Generics.Collections)[3]: TStack&lt;T&gt; 堆栈列表

TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出. TStack 主要有三个方法.一个属性:Push(压栈).Pop(出栈).Peek(查看下一个要出栈的元素);Count(元素总数). 本例效果图: 代码文件: unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, S

Delphi 通过Access Violation地址错误找到错误的哪行代码

什么是 MAP 文件?简单地讲, MAP 文件是程序的全局符号.源文件和代码行号信息的唯一的文本表示方法,它可以在任何地方.任何时候使用,不需要有额外的程序进行支持.而且,这是唯一能找出程序崩溃的地方的救星. DELPHI下生成MAP文件的方法:生成详细的MAP信息的方法(二选一) 1. project -> options -> Linker -> Map file 选择detailed. 2. D:\Fred\Code\DELPHI\MyPas\ErrLineByAddr2>d