學習 TList 類的實現 2

2021-09-05 18:44:17 字數 741 閱讀 5939

我原來以為 tlist 可能是乙個鍊錶, 其實只是乙個陣列而已.

你知道它包含著多大乙個陣列嗎? maxlistsize 個!

maxlistsize 是 delphi 在 classes 單元定義的乙個常量:

maxlistsize = maxint div 16; 也就是 134217727; 這也是 tlist 的最大容量.

其中的 maxint(2147483647) 也就是 2個g, 這是 win32 系統許可乙個應用程式對空間的最大操控權; 16 是乙個 tlist 的大小. 可以測試一下:

var

list: tlist;

begin

list := tlist.create;

showmessage(inttostr(list.instancesize));

list.free;

end;

如果乙個類真的包含乙個 2個g 大小的陣列, 這是不可想想的, 類一建立程式就死定了; 巧妙的是 tlist 只是使用了這個陣列的指標!

delphi 已經為這個陣列和陣列指標都做了定義:

ppointerlist = ^tpointerlist;

tpointerlist = array[0..maxlistsize - 1] of pointer;

這樣以來, 我們使用多少就去申請多少記憶體空間就是了.

關於指標和申請記憶體空間還是應該多了解一點; 因為 tlist 的核心就是這個陣列的指標!

學習 TList 類的實現 6

實現 tmylist.add 函式.tlist 中的 add 函式用到了乙個 grow 方法,它的原理是元素越多就為以後準備更多記憶體,我們這裡省略為預留 4 個元素的記憶體 tlist 中的 add 函式還同時觸動了乙個 notify 方法,這應該是為它們的子類準備的 估計是用它來激發乙個事件的 ...

學習 TList 類的實現 7

總結目前 tmylist 已具備的功能 3 個方法 3 個屬性 add 新增 delete 刪除 clear 清空 count 元素總數 capacity 已存在的所有元素位置數 list 指向核心陣列的指標 唯讀 舉例測試如下 unit unit1 inte ce uses windows,mes...

SPL學習筆記(2) 類的實現

雙向鍊錶的操作總結 2.增加節點的操作 push 會插入到top unshift 會插入到bottom。3.刪除節點的操作 pop 會刪除節點中的top元素 shift 會刪除節點中的bottom元素 4.定位操作 bottom top 5.特定節點的操作 offsetexsits offsetge...