请问TList是做什么用的,在什么情况下用呢?
在下较为笨拙,请给提示一个详细的例子.

解决方案 »

  1.   

    这个类是用来存放指针的,你可以把它当成指针数组来使用:
    //参考如下代码~~
    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;//....
      

  2.   

    TList应该说是一个 封装的链表!
      

  3.   

    >>>TList应该说是一个 封装的链表!对此我不发表任何看法…… 保留我的观点。TList或许说是一个向量比较贴切,是基本数据结构。建议看Delphi算法和数据结构。
      

  4.   

    我知道juliens(星星球爱思纯^_^)肯定又是伴水老兄的马甲。就这种代码的写法,除了伴水老兄别人写不出来……
      

  5.   

    或许是juliens(星星球爱思纯^_^)粘贴的伴水兄的代码?
      

  6.   

    对,忘了注明转贴了,写写比较麻烦,所以贴出来给楼主看看TList的基本用法。
      

  7.   

    Delphi的在线帮助写得清清楚楚,是用来管理指针的。
      

  8.   

    呵呵 TList跟链表关系倒不是很大,它就是一个数组而已.
    只不过大小可以变化 <可以追加> 跟楼上说的一样 类似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; // 在这里实现了 追加长度的功能.........建议你养成追踪源码的习惯 就像候捷说的 源码之前..一切了然<忘记了 :(>