Удаление и добавление элементов в динамический массив
Автор: http://sunsb.dax.ru
Крутая штука динамический массив. Очень быстрая и здоровая реализация.
Единственное, чего на мой взгляд не хватает, это механизма удаления элемента
из середины массива и соответственно вставки в середину.
Насколько я понял ( и проверил ), в памяти массив хранится по-разному
в зависимости от типа его элементов.
Скажм если в массиве строки(!! не shortString )
- хранятся указатели на них,
а если прямоугольники (TRect) - то
непосредственно сами прямоугольники.
Ниже привожу подпрограммы удаления и добавления элемента.
procedure delElem( var A:TRectArray; Index:integer );
var Last : integer;
begin
Last:= high( A );
if Index < Last then move( A[Index+1], A[ Index ],
(Last-Index) * sizeof( A[Index] ) );
setLength( A, Last );
end;
procedure addElem( var A: TRectArray; Index: integer;
ANew: TRect );
var Len : integer;
begin
Len:= Length( A );
if Index > = Len then Index := Len+1;
setLength( A, Len+1);
move( A[Index], A[ Index+1 ],
(Len-Index) * sizeof( A[Index] ));
A[Index] := ANew;
end;
|
Подпрограмма delElem полностью универсальна, а в addElem Вам нужно поменять
тип добовляемого елемента (ANew) на требуемый.
|