博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习 TList 类的实现[7]
阅读量:7091 次
发布时间:2019-06-28

本文共 1855 字,大约阅读时间需要 6 分钟。

  hot3.png

总结目前 TMyList 已具备的功能(3 个方法、3 个属性):
Add: 添加;
Delete: 删除;
Clear: 清空;
Count: 元素总数;
Capacity: 已存在的所有元素位置数;
List: 指向核心数组的指针(只读).
举例测试如下:

unit Unit1;interfaceuses  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] 数组属性来访问元素, 不然麻烦透了!

转载于:https://my.oschina.net/hermer/blog/320417

你可能感兴趣的文章
CentOS安装配置nagios(1)
查看>>
RedHat 6.4 搭建rhcs集群
查看>>
三生万物:决策树
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Python爬虫框架Scrapy学习笔记原创
查看>>
大数据时代怎么做
查看>>
java基本语法
查看>>
细说HTTP之上篇
查看>>
将Eclipse Maven项目 导入 IDEA 步骤 成功运行 已测试!~LC
查看>>
Exchange Server 2010的俩种版本比较
查看>>
asp.net 插入视频
查看>>
laravel中的表单请求类型和CSRF防护(六)
查看>>
有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多...
查看>>
我的友情链接
查看>>
监控指定文件所有机器的网络状况
查看>>
11、网络--Linux Bridge(网桥基础)
查看>>
监控apache脚本原理
查看>>
参观迅达云成观后感
查看>>
linux(ubuntu)查看硬件设备命令
查看>>