Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.11.14;
Скачать: CL | DM;

Вниз

Динамический список   Найти похожие ветки 

 
PinDOS   (2010-07-15 16:19) [0]

Здравствуйте уважаемые мастера!

Возникла необходимость создания списка подобного TStringList, но каждый элемент которого имеет, например, две переменные String и одну Byte. Обычно в таких случаях я писал свой класс на основе TObject, в котором использовал динамический массив. Потом задумался о эффективности моего кода:
1) я использовал проц. SetLength для динамического массива, в то время как в TStringList используется ReallocMem в чем разница?
2) я объявлял просто динамический массив наподобие
TArray: array of Byte;
PArray: ^TArray; // - переменная для работы с дин. массивом

а в TStringList
PStringItemList = ^TStringItemList; //почему идет обращение к типу который еще не объявлен, разве так можно?
TStringItemList = array[0..MaxListSize] of TStringItem;// - массив ограничен, что это дает в сравнении с используемым мною?

3) стоит ли делать как делал я или следует использовать имеющиеся возможности в делфи?

Спасибо!


 
Palladin ©   (2010-07-15 16:26) [1]


> создания списка подобного TStringList

А чем особенность TStringList? Кою ты собираешься использовать для подобности


 
Palladin ©   (2010-07-15 16:36) [2]


> А чем особенность TStringList?

А в чем особенность TStringList?

Извиняюсь.


 
PinDOS   (2010-07-15 17:18) [3]


> А в чем особенность TStringList? Кою ты собираешься использовать
> для подобности

имел ввиду подобного в обращении, т.е. похожие функции вставки элементов, удаления, я с другими списками не работал, поэтому он для меня образец


 
Amoeba_   (2010-07-15 17:23) [4]


> PArray: ^TArray; // - переменная для работы с дин. массивом


> PStringItemList = ^TStringItemList;

Больше никогда такого не пиши.


 
Palladin ©   (2010-07-15 17:27) [5]


> PinDOS   (15.07.10 17:18) [3]

Тогда прочитай про TList.
... а так же про структурный тип - record, про указатели ты уже знаешь


 
Amoeba_   (2010-07-15 17:28) [6]


> Возникла необходимость создания списка подобного TStringList,
>  но каждый элемент которого имеет, например, две переменные
> String и одну Byte.


TListItem = record
 S1, S2: string;
 N: Byte;
end;

Создавай элементы через New и храни их в TList.


> стоит ли делать как делал я или следует использовать имеющиеся
> возможности в делфи?

Определенно не стоит делать так, как делал.


 
PinDOS   (2010-07-15 17:51) [7]


> Amoeba, Palladin

спс, буду с ним разбираться


> Больше никогда такого не пиши.

в чем собственно ошибка


 
PinDOS   (2010-07-15 17:53) [8]

..а понял, сори)


 
icWasya ©   (2010-07-15 18:03) [9]

Хватит троллить.
По поводу
>1) я использовал проц. SetLength для динамического массива, в то время как в TStringList используется ReallocMem в чем разница?
Исторически TStringList появился до динамических массивов. Не стали переписывать. Работает - не трогай.
2.1)в TStringList
PStringItemList = ^TStringItemList; //почему идет обращение к типу который еще не объявлен, разве так можно?
Если в одном блоке type описывается сразу несколько типов,
то
a) можно использовать ссылку на тип, который ещё не описан, например    PA=^TB
b) можно использовать предварительное описание, если тип - это класс, например
 TB = class;
и в последующих строках использовать. Компилятор будет знать, что это указатель, и будет отводить место под поля такого типа место, как под указатель. Но в любом случае тип TB нужно будет определить в пределах того же блока type, где от впервые появился.
2.2) TStringItemList = array[0..MaxListSize] of TStringItem;// - массив ограничен, что это дает в сравнении с используемым мною?
При ручном выделении памяти (GetMem/FreeMem/ReallocMem) всё равно нужно так же вручную следить за выход за границу массива, а что бы компилятор не мешал, в типе TStringItemList установлен максимально возможный верхний индекс для массива типа TStringItem.
3) стоит ли делать - а вот тут на твой вкус. Если использовать стандартные возможности - то меньше писанины, но может оказаться чуть медленнее.
Если изобретать велосипед, то нужно чётко понимать, как оно устроено, что и когда делает, и самому следить за всеми деталями.
Удачи!


 
azamatufa ©   (2010-08-24 10:56) [10]

Удалено модератором
Примечание: Задай свой вопрос в отдельной ветке


 
RWolf ©   (2010-08-24 10:59) [11]

Удалено модератором


 
Сергей М. ©   (2010-08-24 11:12) [12]


> использовал проц. SetLength для динамического массива, в
> то время как в TStringList используется ReallocMem в чем
> разница?


В этом разрезе - ни в чем.
Вызов SetLength приводит к тому же самому, но неявному вызову ReallocMem


 
Anatoly Podgoretsky ©   (2010-08-24 11:15) [13]

> Сергей М.  (24.08.2010 11:12:12)  [12]

Разница в единстве.
В единстве наша сила.


 
azamatufa ©   (2010-08-24 11:54) [14]

Удалено модератором


 
azamatufa ©   (2010-08-24 12:01) [15]

Удалено модератором


 
Anatoly Podgoretsky ©   (2010-08-24 12:12) [16]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2010.11.14;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.009 c
2-1282152063
zlodey
2010-08-18 21:21
2010.11.14
список IXMLNode


2-1282107940
TyTuk
2010-08-18 09:05
2010.11.14
Перемещения файлов с нужным расширением.


15-1281070402
@!!ex
2010-08-06 08:53
2010.11.14
Как определить географические координаты на плоской карте?


2-1281707135
PavDimka
2010-08-13 17:45
2010.11.14
Передача данных через интернет


15-1280441833
Германн
2010-07-30 02:17
2010.11.14
Кстати. День сисадмина.