Форум: "Основная";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];
Вниздинамические массивы и операции Найти похожие ветки
← →
TButton (2003-02-24 21:17) [0]В програмах я часто использую динамические массивы ( n:array of TMyType)
Часто мне приходится преобразовывать в объект, чтоб выполнять с ними (массивами) разного рода операции
Часто мне приходится писать для объекта методы а-ля Поиск, Добавление, Вставка, Удаление эл-та массива.
В последнее время мне стало казаться, что то что я делал раньше (и пока еще делаю) - полный бред. И есть способ гораздо проще. Может быть кто-то его знает? Подскажите плз.
← →
Yuri-7 (2003-02-24 21:28) [1]Используй TList или TSortList. Там можешь стандартным образом добавлять, удалять и т.п.
← →
TButton (2003-02-25 11:14) [2]ага. а вот с ним у меня возникли траблы. конкретный пример
type
THuman = record
x,y:integer;
action:THumanAction;
end;
теперь нужно создать массив допустим 10 штук этих гуманоидов, задать каждому случайные координаты, потом эти координаты считать и вывести в мемку. плз хлп.
← →
Владислав (2003-02-25 12:51) [3]Непонятно в чем проблемы, собственно.
Объяви тип своего массива, объяви тип указателя на свой массив, и используй все это.
← →
TButton (2003-02-25 17:56) [4]нееее я имел ввиду, как сделать ето TList"ом.
← →
jack128 (2003-02-25 18:01) [5]Кого сделать листом???
Создай наследника TList
При добавлении элемента выделяй память под этот элемент,
при удалении - освобождай и все дела...
← →
TButton (2003-02-26 21:58) [6]2 jack128 ©
ммм... а можно кусочек кода?
← →
jack128 (2003-02-26 22:21) [7]
Пример(наверника с глюками ;-))
type PRec = ^Trec;
Trec = record .... end;
TList.AddRec(Rec : TRec);
var p : PRec;
begin
new(p);
Add(p);
end;
TList.Delete(index : integer);
var p : PRec;
begin
p := PRec(Items[index]);
delete(index);
dispose(p);
end;
← →
jack128 (2003-02-26 22:27) [8]Я же обещал глюк )
TList.AddRec(Rec : TRec);
var p : PRec;
begin
new(p);
p^ := Rec;
Add(p);
end;
Да забыл о минусах предупредить. теперь нельзя использовать TList.Clear;
Есть 2 пути решения
1) Написать TMyList.ClearRec; и переписать диструктор чтоб он вызывал этот метод
2) А лудше обрати внимание на TList.Notify - он вызываются когда
в список добовляют или удаляют указатель..
← →
AlexSV (2003-02-27 11:01) [9]> jack128
Можно вопрос:
а что передается в процедуру
TList.AddRec( Rec : TRec);
если мы внутри делаем new(p) ?
А по поводу TList.Notify, то если туда добавить немного кода, то можно и TList.Clear вызывать.
procedure TMyList.Notify(Ptr: Pointer; Action: TListNotification);
begin
if Action = lnDeleted then
Dispose(Ptr);
inherited Notify(Ptr, Action);
end;
← →
TButton (2003-02-28 07:55) [10]эээ... а в чем фишка переписывания ТЛиста? Я итак этим каждый раз занимаюсь... или я что-то не так понял?
← →
Yuri-7 (2003-02-28 09:40) [11]Можешь ничего не переписывать. Возьми TSortList, например, на www.delphipages.com, там есть метод ClearAll.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c