
- •12.1. Класи й об’єкти. Основні поняття
- •12.2.Опис класів і об’єктів
- •12.3. Складові класів
- •12.4. Поняття успадкування
- •12.4. Поліморфізм. Віртуальні та динамічні методи
- •12.5. Структура опису класу
- •13. Класи загального призначення
- •13.1. Клас exception –- обробки виключень
- •13.2. Клас tlist – списки
- •13.3. Класи tstrings, tstringlist – набори рядків й об’єктів
13.2. Клас tlist – списки
Клас TList дозволяє створити набір з довільної кількості елементів й організувати індексний спосіб доступу до них, як це робиться при роботі з масивом. Списки відрізняються від масивів двома важливими особливостями. По-перше, їхній розмір може динамічно змінюватися у ході роботи програми і фактично обмежується лише доступною пам'яттю. По-друге, у списках можуть зберігатися елементи різних типів.
Технічно список - це масив не типізованих вказівників на розміщені в динамічній пам'яті дані. Список допускає динамічну зміну розмірів, а не типізовані вказівники дозволяють посилатися на довільні елементи даних.
Властивості класу TList |
|
Властивость |
Призначення |
Property Capacity: Integer; |
Містить кількість елементів масиву покажчиків списку. Завжди більше Count. Якщо при додаванні чергового елемента Count стало дорівнювати Capacity, то відбувається автоматичне розширення списку на 16 елементів. |
Property Count: Integer; |
Кількість елементів списку. Ця властивість змінюється при додаванні або вилучені елемента. |
Property Items(Index: Integer) : Pointer; |
Повертає покажчик на елемент списку за його індексом. Перший елемент списку має індекс 0. |
Property List: PointerList; |
Повертає покажчик на масив елементів списку. |
Властивість Count визначає кількість поміщених у список елементів, у той час як Capacity - поточну ємність списку. Якщо при додаванні чергового елемента виявиться, що ємність списку вичерпана, відбувається нарощування його ємності на фіксовану величину (для Count < 5 - на 4 елементи, для 4 < Count < 8 - на 8, для Count > 7 - на 16). При цьому спочатку резервується пам'ять для розміщення розширеного масиву вказівників, потім у неї копіюється вміст старого масиву, після чого старий масив покажчиків знищується (пам'ять, яку вони займали повертається Windows). Якщо заздалегідь відомо скільки елементів необхідно помістити у список, то на початку роботи потрібне значення слід встановити властивості Capacity - це знизить непродуктивні витрати часу на розширення списку.
Методи класу TList |
|
Методи |
Призначення |
Function Add(Item: Pointer): Integer; |
Додає елемент Item у кінець списку й повертає його індекс. |
Procedure Clear; |
Очищає список. Не звільняє пам'ять, пов'язану з кожним вилученим елементом. Властивостям Count й Capacity встановлює значення 0. |
Procedure Delete(Index: Integer) ; |
Вилучає зі списку елемент із індексом Index. Всі елементи, розташовані за ним зміщаються на одну позицію вверх. |
Class Procedure Error(const Msg: String; Data: Integer); virtual; |
Збуджує виключення EListError з параметрами Msg й Data. |
Procedure Exchange(Indexl, Index2: Integer); |
Міняє місцями елементи з індексами Indexl й Index2. |
Function Expand: TList; |
Розширює масив елементів, збільшуючи Capacity. |
Function First: Pointer; |
Повертає вказівник на найперший елемент списку. |
Function IndexOf(Item: Pointer): Integer; |
Відшукує в списку елемент Item і повертає його індекс. |
Procedure Insert(Index: Integer; Item: Pointer); |
|
Function Last: Pointer; |
Повертає вказівник на останній елемент списку. |
Procedure Move(CurIndex, NewIndex: Integer); |
Переміщає елемент у списку з позиції CurIndex у позицію NewIndex. Всі елементи старого списку з індексами від Curlndex до NewIndex зменшують свій індекс на 1. |
Procedure Pack; |
|
Function Remove(Item: Pointer): Integer; |
Шукає у списку елемент Item і вилучає його. |
Procedure Sort(Compare: TListSortCompare); |
Сортує список за допомогою функції Compare. |
Методи Add й Insert одержують значення вказівника на элемент, що вставляється у список. Щоб скористатися ними, програміст повинен сам розмістити у купі дані й одержати відповідний вказівник. Точно так само методи Delete, Remove й Clear не знищують розміщені у пам'яті дані, які програміст повинен, якщо це необхідно, знищити сам. Наприклад:
var
List: TList;
Item: Pointer;
Value: AnyType;
begin
List := TList.Create; // Створення списку
Item := New(Value); // Розміщення даних у купі
List.Add(Item); // Елемент додається до списку
List.Remove(Item); // Вилучення елемента зі списку
Dispose (Item) ; // Вилучення елемента з купи
List.Free; // Вилучення непотрібного списоку
end;
Метод Sort упорядковує список за критерієм (зростання, спадання) встановленим функцією Compary.