Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.11.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
2-1282274883
Гость
2010-08-20 07:28
2010.11.14
Подскажите простой компонент для рисования графика по точкам?


15-1280788269
Германн
2010-08-03 02:31
2010.11.14
Помимо перехода на версии Win старше ХР


4-1241302061
_bass
2009-05-03 02:07
2010.11.14
Список процессов


15-1280779554
Petr V. Abramov
2010-08-03 00:05
2010.11.14
кто какими погодными сайтами пользуется?


15-1280907858
12
2010-08-04 11:44
2010.11.14
Мысленное управление. Не обманывают ли?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский