На главную страницу
Форум txt.version   




Статья :: Класс TList

 

Класс TList

Основой класса TList является список указателей. Сам список представляет собой динамический массив указателей, к которому можно обратиться через индексированное свойство

property Items[Index: Integer]: Pointer;

Нумерация элементов начинается с нуля.

Прямой доступ к элементам массива возможен через свойство

type

PPointerList = ^TPointerList;

TPointerList = array[0..MaxListSize-1] of Pointer;

 property List: PPointerList;

которое имеет атрибут "только для чтения".

Так как элементы списка являются указателями на некоторые структуры, прямое обращение к составным частям этих структур через свойство items невозможно. Как это можно сделать, рассказывается ниже в примере.

 Примечание

В списке могут содержаться указатели на разнородные структуры. Не обязательно хранить в списке только указатели на объекты или указатели на записи.

Реализованные в классе TList операции со списком обеспечивают потребности разработчика и совпадают с операциями списка строк.

Для добавления в конец списка нового указателя используется метод

function Add(Item: Pointer): Integer;

Прямое присваивание значения элементу, который еще не создан при помощи метода Add, вызовет ошибку времени выполнения.

Новый указатель можно добавить в нужное место списка. Для этого используется метод

procedure Insert(Index: Integer; Item: Pointer);

В параметре index указывается необходимый порядковый номер в списке.

Перенос существующего элемента на новое места осуществляется методом

procedure Move(Curlndex, Newlndex: Integer);

Параметр CurIndex определяет старое положение указателя. Параметр NewIndex задает новое его положение.

Также можно поменять местами два элемента, определяемые параметрами Indexl и Index2:

procedure Exchange(Indexl, Index2: Integer);

Для удаления указателей из списка используются два метода. Если известен индекс, применяется метод

procedure Delete(Index: Integer);

Если известен сам указатель, используется метод

function Remove(Item: Pointer): Integer;

Эти методы не уменьшают объем памяти, выделенной под список. При необходимости сделать это следует использовать свойство capacity. Также существует метод Expand, который увеличивает отведенную память автоматически в зависимости от текущего размера списка.

function Expand: TList;

Для того чтобы метод сработал, необходимо, чтобы count = Capacity. Алгоритм работы метода представлен в табл. 7.1.

Таблица 7.1. Алгоритм увеличения памяти списка

Значение свойства Capacity

На сколько увеличится свойство Capacity

<4

4

4..8

8

>8

16

Метод

procedure Clear; dynamic;

используется для удаления всех элементов списка сразу. Для поиска указателя по его значению используется метод

function IndexOf(Item: Pointer): Integer;

Метод возвращает индекс найденного элемента в списке. При неудачном поиске возвращается — 1.

Для сортировки элементов списка применяется метод

type TListSortCompare = function (Iteml, Item2: Pointer): Integer;

 procedure Sort(Compare: TListSortCompare);

Так как состав структуры, на которую указывает элемент списка, невозможно заранее обобщить, разработка процедуры, осуществляющей сортировку, возлагается на программиста. Метод Sort лишь обеспечивает попарное сравнение указателей на основе созданного программистом алгоритма (пример сортировки см. выше в разд. "Класс TStringList").

Полностью все свойства и методы класса TList представлены в табл. 7.2.

Таблица 7.2. Свойства и методы класса TList

Объявление

Описание

property Capacity: Integer;

Определяет число строк, для которых выделена память

property Count: Integer;

Возвращает число строк в списке

property Items [Index: Integer]: Pointer;

Список указателей

type

TPointerList = array [0 . .MaxListSize-i ] of Pointer;

PPointerList = ATPointerList; property List: PPointerList;

Динамический массив указателей

function Add (Item: Pointer): Integer;

Добавляет к списку новый указатель

procedure Clear; dynamic;

Полностью очищает список

procedure Delete (Index: Integer:;

Удаляет указатель с индексом

Index

class procedure Error (const Ksg: string; Data: Integer); virtual;

Генерирует исключительную

Ситуацию EListError.

Сообщение об ошибке создается из форматирующей строки Msg и числового параметра Data

procedure Exchange (Indexl, Index2: Integer);

Меняет местами указатели с индексами Indexl и Index2

function Expand: TList;

Увеличивает размер памяти, отведенной под список

function First: Pointer;

Возвращает первый указатель из списка

function IndexOf (Item: Pointer): Integer;

Возвращает индекс указателя, заданного параметром Item

procedure Insert (Index: Integer; Item: Pointer) ;

Вставляет новый элемент Items позицию Index

function Last: Pointer;

Возвращает последний указатель в списке

procedure Move (Curlndex, Newlndex: Integer);

Перемещает элемент списка на новое место

procedure Pack;

Удаляет из списка все пустые (Nil) указатели

function Remove (Item: Pointer): Integer;

Удаляет из списка указатель

Item

type TListSortCompare = function (Iteml, Item2 : Pointer): Integer;

procedure Sort (Compare: TListSortCompare);

Сортирует элементы списка

 

 

Класс TList

страницы в данном разделе 
 ГЛАВА 7  ГЛАВА 7 Списки и коллекции
 Список строк  Класс TStrings
 Класс TStringList  Список указателей
 Класс TList  Пример использования списка указателей
 Коллекции  Класс TCollection
 Класс TCollectionltem  Резюме


Разделы
Околокомпьютерная литература (375)
Программирование (102)
Программы (75)
ОС и Сети (49)
Интернет (29)
Аппаратное обеспечение (16)
Базы данных (6)

Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)

PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C





 
©  programming-lang.com  справочник программиста