Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OЗП в delphi.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
105.77 Кб
Скачать

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);

Вставляє елемент у позицію Index списку: новий елемент одержує індекс Index, всі елементи з індексами Index і більше збільшують свій індекс на 1. При необхідності розширює список.

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]