文档章节

学习 TList 类的实现[7]

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 462
阅读 1
收藏 0
总结目前 TMyList 已具备的功能(3 个方法、3 个属性):

Add: 添加;
Delete: 删除;
Clear: 清空;
Count: 元素总数;
Capacity: 已存在的所有元素位置数;
List: 指向核心数组的指针(只读).

举例测试如下:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}

uses MyList;         {uses TMyList 所在单元}

type
  TMyRec = record    {定义结构; 用于填充测试}
    name: string[8];
    age : Word;
  end;

procedure TForm1.FormCreate(Sender: TObject);
var
  ListA: TMyList;
  r,r1,r2,r3,r4,r5: TMyRec;
begin
  ListA := TMyList.Create;

  {建立之初, Count 与 Capacity 两个属性都应该是 0; 测试:}
  ShowMessageFmt('%d,%d',[ListA.Count,ListA.Capacity]); {0,0}

  {添加一个元素(指针)}
  r1.name := '张三';
  r1.age  := 11;
  ListA.Add(@r1);

  {现在 Count 应该是 1, Capacity 应该是 4; 测试:}
  ShowMessageFmt('%d,%d',[ListA.Count,ListA.Capacity]); {1,4}

  {继续添加}
  r2.name := '李四';
  r2.age  := 22;
  ListA.Add(@r2);

  r3.name := '王五';
  r3.age  := 33;
  ListA.Add(@r3);

  r4.name := '孙六';
  r4.age  := 44;
  ListA.Add(@r4);

  r5.name := '候七';
  r5.age  := 55;
  ListA.Add(@r5);

  {现在 Count 应该是 5, Capacity 应该是 8; 测试:}
  ShowMessageFmt('%d,%d',[ListA.Count,ListA.Capacity]); {5,8}

  {用 TMyList 的 List 属性获取第三个元素}
  r := TMyRec(ListA.List^[2]^);
  ShowMessageFmt('%s:%d',[r.name, r.age]); {王五:33}

  {删除第三个元素后再访问第三个元素}
  ListA.Delete(2);
  r := TMyRec(ListA.List^[2]^);
  ShowMessageFmt('%s:%d',[r.name, r.age]); {孙六:44}

  {执行 Clear 方法后, Count 和 Capacity 应该清 0}
  ListA.Clear;
  ShowMessageFmt('%d,%d',[ListA.Count,ListA.Capacity]); {0,0}

  ListA.Free;
end;

end.

 
 
 
 
 

 

 

  
从上面的例子可以看出, 现在要访问一个元素真不容易: r := TMyRec(ListA.List^[2]^);

理解一下:

ListA.List 是那个核心数组的指针, 要表示那个数组应该用: ListA.List^

数组的第二个元素 ListA.List^[2], 又是指向元素的指针, 获取元素应该用: ListA.List^[2]^

还有转换成可以识别的对象: TMyRec(ListA.List^[2]^);

应尽早添加 TMyRec.Items[i] 数组属性来访问元素, 不然麻烦透了!

本文转载自:http://www.cnblogs.com/del/archive/2008/03/31/1130882.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
vim for php IDE 我的打造过程

vim是一个很强的神器,对于我只用到其中的一小部分内容,接下来是我打造 php IDE的全过程,希望有兄弟能指点我其中的不足,要学习的兄弟能跟我一起努力学习。 第一步:配_vimrc,配成自己喜欢...

路边拾草人
2011/04/16
9.7K
21
windows环境中vim插件配置(便利的vim)

打开vim的文件类型自动检测功能:filetype on,就是在vimrc文件中加上filetype on 1.ctags 1.1ctags功能: tags是个exe文件,在shell中执行来在工程目录中创建tags(就是函数的映射关系),适...

_FreeDoM
2014/06/04
0
0
[转]vim ctags使用方法

windows下很多人都使用source insight 编写和查看代码。linux下可以使用VIM,刚开始会觉得VIM像windows下的记事本,而如果使用得当,它并不比source insight 逊色。 在这里,我会尽我所能细致...

文艺小青年
2017/07/13
0
0
深入解析windows XP/2003:查看进程树

在windows调试工具箱中使用tilist.exe的/t开关,显示进程树。 Microsoft Windows XP [版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp. C:/Program Files/Debugging Tools for Windo......

晨曦之光
2012/03/09
0
0
VIM编辑器支持Python开发环境(Vim+Ctags+Taglist)

在Linux下用VI编辑器进行Python开发,有必要对VI编辑器进行一些配置,使其具备以下特性: 1、加强的 Python 语法高亮显示; 2、对脚本、项目生成 ctag 序列; 3、在 vim 中显示 ctag 序列列表...

庄小寒
2014/02/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RedHat已更改其开源许可规则

对于编程圈外的人来说,软件许可证似乎并不重要,但是,在开源领域,开源许可是非常重要的。 因此,领先的Linux公司Red Hat宣布了一件大事,所有新的由Red Hat发起的使用GNU通用公共许可证(...

linux-tao
13分钟前
3
0
游戏化策划的反馈机制

简评:如何低成本地设计游戏化活动运营方案 当项目活动组采用游戏化机制来设计活动时,往往会犯一个错误 —— 以为物质奖励(金钱或实物)就是终极奖励。然后一次又一次的证据显示,有形奖励...

极光推送
15分钟前
1
0
PHP "延迟静态绑定" 功能,static

从这个名字的定义提取出两个关键点,第一点静态,也就是说这个功能只适用于静态属性或静态方法。 第二点延迟绑定,这个根据下面代码就可以很好的理解 class A{ static $name = "Tom";...

nsns
19分钟前
1
0
《看图轻松理解数据结构与算法系列》导引贴

最近学习数据结构,遇到一个很喜欢的博主,他的文章图文并茂,理解起来很容易。特此开贴记录,方便反复阅读。 博主主页 https://juejin.im/user/57c3970f79bc440063e58518/posts?sort=popul...

科陆李明
56分钟前
1
0
20.27 分发系统介绍~ 20.30 expect脚本传递参数

分发系统介绍分发系统-expect讲解(也就是一个分发的脚本)场景:业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者lnmp,最好还需要吧代码上传到服务器上;但是因...

洗香香
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部