TList包含對象指針列表。
類關系 TObject
Tlist用於存儲和維護對象列表。TList引入屬隆和方法以執行以下操作:
(1)在列表中增加或刪除對象。
(2)在列表中重排對象。
(3)在列表中定位和獲得對象。
(4)在列表中對對象進行排序。
屬性列表
Capacity 標識TList對象維護的指針數組的大小。
Count 表明在列表中使用的項的數量。
Items 列出對象的引用。
List 標識組成Items的指針數組。
方法列表
~TList 刪除與TList對象有關的內存。
Add 在列表的末尾插入有關的內存。
Clear 從列表中刪除所有項。
Delete 刪除Index參數標識的項。
Error 產生EListError異常。
Exchange 交換Items數組中兩項的位置。
Expand 增加列表的Capacity。
First 返回Items[0]。
IndexOf 返回Items數組中一指針的索引。
Insert 增加一對象至Items數組中。
Last 返回Items[Count-1]。
Move 在Items數組中改變某一項的位置。
Pack 從Items數組中刪除所有的零項。
Remove 從Items數組中刪除Items參數的第一個引用。
Sort 在列表中執行QuickSort。
TList 創建一個新的TList對象。
詳細說明
屬性
TList::Capacity
__property int Capacity = {read=FCapacity,write=SetCapacity,nodefault};
標識TList對象維護的指針數組的大小。
設置Capacity為列表將要包含的指旬數。當當設置Capacity屬性時,如果沒有足夠的內存擴展列表為它的新的大小,將產生EOutOfMemory異常。
在沒有重新分配內存情況下,讀取Capacity可得到列表能包含的對象數。注意不要混淆Capacity和Count屬性;Count屬性為列表中使用的項的數量。Capacity值總是大於或等於Count值。當Capacity大於Count,通過設定Capacity至Count可以回收未使用的內存。當添加一對象至列表,而此列表已被填充到Capacity時,Capacity屬性自動增加。在增加對象之前設置Capacity能減少內存重分配的數量,因此提高了執行效果。例如:
List->Clear();
List->Capacity = Count;
for(int i=0;i<Count;i++) List->add(...);
在for循環之前分配Capacity保證在隨後的每一Add操作不重新分配列表。在調用Add時避免重新分配可以提高執行效果並且保證Add操作不產生異常。
TList:;Count
__property int Count = {read=FCount,write=SetCount,nodefault};
表明在列表中使用的項的數量。
讀取Count可以確定Items數組中項的數量。增加Count的大小將在Items數組的末尾增加必要的零指針的數量;減小Count的大小將從Items數組的末尾刪除必要的零指針的數量。
注意:Count並不總等同於列表中引用的對象的數量。在Items數組中,某些項將包含零指針。如果要刪除零指針並且設置Count為對象引用的項數,則可以調用Pack方法。
TList::Items
__property void* Items[int Index] = {read=Get,write=Put};
列出對象的引用。
使用Items可以獲得數組中指定對象的指針。Index參數標識對象的索引;第一個對象的索引值為0,第二個對象的索引值為1,以此類推。設置Items可以在指定位置改變引用。使用帶有Count屬性的Items可以遍歷列表中的所有對象。
應該注意的是,並不是Items數組中所有的項都需包含對象的索引。有些項可能是零指針。如果要刪除零掼針並且減小Items數組的大小至對象的數量,可以調用Pack方法。
TList::List
typedef void* TPointerLIst[134217727];
typedef TPointerLIst* PPointerList;
__property PPointerList List = {read=FList};
標識組成Items的指針數組。
使用List直接獲得Items數組。
TList::~TList
__fastcall virtual~TList(void);
刪除與TList對象有關的內存。
在應用中不要直接調用~TList。用delete替代。
~TList釋放存儲項列表的內存。注意,~TList並不釋放指向列表元素的內存。
TList::Add
int __fastcall Ad(void* Item);
在列表的末尾插入新項,可以調用Add方法。Add方法返回值為新項的索引值;列表中第一項的索引值為0
如果Items數組使用完列表對象Capacity,則Add方法分配更多的內存。Add增加Count值以反映新指針的增加。注意:即使Items數組包含零指針,Add方法總是在Items數組的末尾插入Items指針。
TList::Clear
DYNAMIC void __fastcall Clear(void);
從列表中刪除所有項。
如果要清空Items數組並且設置Count為0,可以調用Clear方法。Clear方法同時釋放用於存儲Items數組的內存並且設置Capacity為0。
TList::Delete
void __fastcall Delete(int Index);
刪除Index參數標識的項。
如果要從列表指定位置刪除項,可以調用Delete方法。索引從零開始,因此第一項的索引值為0,第二項的索引值為1,以此類推。調用Delete方法向前移動刪除項之後的所有英並減小Count。
如果要刪除一項的索引但並不從列表中刪除該項並且改變Count,可設置Index的Items屬性為零。注意Delete並不釋放的項相關的內存。如果要釋放存儲刪除項的內存,可設置Capacity屬性。
TList::Error
virtual void __fastcall Error(const System::AnsiString Msg,int Data) {Error(__classid(TList),Msg,Data};
產生EListError異常。
當TList對象出現錯誤時,調用Error產生異常。Error組合Msg參數標識的錯誤消息和Data參數標識的數據植,然後產生EListError異常。調用Error而不是增加一行程序代碼,例如:
throw EListError(MyMsg,iBadValue);
為減少應用程序的代碼量。
TList::Exchange
void __fastcall Exchange(int Index1,int Index2);
交換Items數組中兩項的位置。
如果要交換台Items數組中位於Index1和Index2的項的位置,可以調用Exchange方法。索引從零開始,因此,列表中第一項的索引值為0,第二項的索引值為1,以此類推。
TList::Expand
TList* __fastcall Expand(void);
增加列表的Capacity。
為了在列表增加新項,可以調用Expand以創建更多的空間。如果沒有填充列表至Capacity,Expand一作任何處理。如果Count = Capacity,Expand按如下增加列表的Capacity。如果Capacity值大於8,Expand增加列表的Capacity至16;如果Capacity值大於4,但是小於8,列表的Capacity增加至8,如果Capacity值小於4,列表的Capacity 增加4。
返回值為擴展的列表對象。
TList::First
void* __fastcall First(void);
返回Items[0]。
調用First獲得Items數組中的第一個指針。
TList::IndexOf
int __fastcall IndexOf(void* Item);
TList::Inset
void __fastcall Insert(int Index,void* Item);
返回Items數組中一指針的索引。
調用IndexOf獲得Items數組中一指針的索引。Item參數標識指針。數組中第一項索引值為0,第二項的索引值為1,以此類推。如果項不在列表中,IndexOf返回-1。如果一指針在列表中出現多次,IndexOf返回第一次出現的索引值。
TList::Last
void* __fastcall(void);
增加一對象至Items數組中;Index參數標識該對象的添加位置。
如果要添加Item至Items數組中,可以調用Insert方法。Index參數為基於0的索引,因此,數組中的第一個位置的索引值為0。Insert在指定位置增加項;改變原先處於此位置的項以及後面的所有項。如果必要,Insert擴充列表的Capacity並且設置Items屬性。
TList::Move
void __fastcall Move(int CurIndex,int NewIndex);
返回Items[Count-1]。
如果要在Items數組中得到最後的指針,可以調用Last方法。
TList::Pack
void __fastcall Pack(void);
從Items數組中刪除所有的零項。
調用Pack將所有非零項移至Items數組的前面並且減小Count屬性為實際使用的項的數量。Pack並不釋放存儲零指針的內存。為了釋放通過Pack方法刪除的不使用項所占用的內存,可以設置Capacity屬性為Count的新值。
TList::Remove
int __fastcall Remove(void* Item);
從Items數組中刪除Item參數的第一個引用。
當不知道指定項的索引時,調用Remove從Items數組中刪除指定項。在刪除指定項之前,返回該項的索引。在指定項刪除之後,該項之後的所有項的索引位置提前並且Count減一。應該注意的是,如果Items數組包含指針的多個復制,僅第一個復制被刪除。
TList::Sort
typedef int __fastcall (*TListSortCompare)(void* Item1,void* Item2);
void __fastcall Sort(TListSortCompare Compare);
根據Compare函數的比較,在列表中執行QuickSort。
如果要對Items數組中草藥的項進行排序,可以調用Sort方法。Compare為比較函數,該函數表明項是如何進行排序的。如果Item1小於Item2,則Compare返回值為0;如果Item1大於Item2,則Compare返回值大於0;
TList::TList
__fastcall virtual TList(void);
創建一個新的TList對象。
不要直接調用TList。用new替代。