请问TList是做什么用的,在什么情况下用呢?
在下较为笨拙,请给提示一个详细的例子.
在下较为笨拙,请给提示一个详细的例子.
解决方案 »
- width = right - left 后面需要+1 吗?
- 毕业设计急用!急!急!急!
- 怎样让软件支持其他语言输入和显示?
- 一个serverSocket的问题,解决问题者加分
- 关于安装控件rxlib2.75 for delphi6.0的问题
- 我将一个form的formstyle改为fsMDIChild,然后再改回fsNormal后,发现这个form仍然是一application.creatform(Tform1,form1)时这个form就
- 菜鸟问:关于音频地压缩和传输及ACMWaveIO或ACMAUDIO控件地详细使用
- 在一个缓冲区中如何按一定长度分批取数据?
- 商场进销存
- 有没有Windows API函数的使用帮助下载
- 请各位帮帮忙?CDMAGPSONE技术是什么呀?说详细点,在线等(急)
- 返回值问题
//参考如下代码~~
uses DateUtils; type
PListData = ^TListData;
TListData = record
ItemName: string;
AddTime: TDateTime;
end;//....
begin //创建List~~
FList := TList.Create;
end;//....
var
I: Integer;
begin //释放List~~
for I := 0 to FList.Count - 1 do
Dispose(PListData(FList[I]));
FList.Free;
end;//....
var
vListData: PListData;
begin //添加List元素~~
New(vListData);
vListData^.ItemName := '????';
vListData^.AddTime := Now;
FList.Add(vListData);
Caption := IntToStr(FList.Count);
end;//....
只不过大小可以变化 <可以追加> 跟楼上说的一样 类似C++中的vector;delphi中源码如下:
TList = class(TObject)
private
FList: PPointerList; // 指向List的指针
FCount: Integer; // 当前list中有几个数据<这个数据可以包含自定义类型>
FCapacity: Integer; // *注意这个了 这个就是当前list的容量.我来写给你看看:
var
lst:TList;
代码 开始:
lst := TList.Create; // FCapacity有个默认的值 这里是 4
然后 当你往里面插数据时Insert后 它会:procedure TList.Insert(Index: Integer; Item: Pointer);
begin
if (Index < 0) or (Index > FCount) then
Error(@SListIndexError, Index);
if FCount = FCapacity then
Grow; // 注意整个Grow**
if Index < FCount then
System.Move(FList^[Index], FList^[Index + 1],
(FCount - Index) * SizeOf(Pointer));
FList^[Index] := Item;
Inc(FCount);
if Item <> nil then
Notify(Item, lnAdded);
end;procedure TList.Grow;
var
Delta: Integer;
begin
if FCapacity > 64 then
Delta := FCapacity div 4
else
if FCapacity > 8 then
Delta := 16
else
Delta := 4;
SetCapacity(FCapacity + Delta);
end; // 在这里实现了 追加长度的功能.........建议你养成追踪源码的习惯 就像候捷说的 源码之前..一切了然<忘记了 :(>