Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Списки - TList


Автор: Christoph 23.3.2008, 01:36
Помогите разобраться с вопросом.....списки - это же массив из указателей, верно? Когда следует лучше всего использовать , вот эти списки и для чего? 

Автор: VICTAR 23.3.2008, 02:15
Думаю этого хватит
Цитата

Класс TList позволяет создать набор из произвольного количества элементов и организовать индексный способ доступа к ним, как это делается при работе с массивом. Списки отличаются от массивов двумя важными особенностями. Во-первых, их размер может динамически меняться в ходе работы программы, фактически ограничиваясь лишь доступной памятью. Во-вторых, в списках могут храниться элементы разных типов.

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

Автор: 4d5a 23.3.2008, 11:04
Думаю, не лишним будет вспомнить, что

Цитата

Списком называется упорядоченное множество, состоящее из переменного числа элементов, к которым применимы операции включения, исключения. Список, отражающий отношения соседства между элементами, называется линейным. Длина списка равна числу элементов, содержащихся в списке, список нулевой длины называется пустым списком. Линейные связные списки являются простейшими динамическими структурами данных.


конечно, хотя 'классические' списки ассоциируются обычно с чем-то вроде 
Код

 type
   sptr = ^stype;  
   stype = record  
       data : pointer;    
       next : sptr; 
     end;
 
Но Это уже Реализация


и делфовский TList основан на:

Код

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


Лично использую  TList не реже чем динамические массивы. Если тип элемента списка отличен от базового, ну даже например просто запись 
type t1=record
  a1,a2:integer;
  c:char;
end;
  pt1=^t1;

то Склоняюсь к TList. 
Думаю, во многих случаях TList предпочтительней, тк его поведение более ясно. А с такими объектами как динамичесие массивы (объекты с управляемым временем жизни) иногда возникают сложности, тк многое в их работе скрыто от поверхностного взгляда.



Автор: Christoph 23.3.2008, 13:26
Спасибо разобрался  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)