Как вставить элемент в середину массива.

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Как вставить элемент в середину массива.

Сообщение Плутон » 31.12.2011 09:12:01

Здравствуйте! В моей программе есть динамический массив в стиле Delphi. Как вставить в его середину элемент?
Плутон
новенький
 
Сообщения: 19
Зарегистрирован: 30.08.2011 09:39:38

Re: Как вставить элемент в середину массива.

Сообщение Nik » 31.12.2011 10:18:36

Универсальное решение "в лоб":

1. Добавляете элемент в конец массива.
2. Поштучно сдвигаете элементы с того места, где нужно вставить новый элемент (что-то типа arr[n]:=arr[n-1] ).
3. На освободившееся в середине массива место ставите новый элемент.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Как вставить элемент в середину массива.

Сообщение Плутон » 31.12.2011 10:54:44

Спасибо!
Плутон
новенький
 
Сообщения: 19
Зарегистрирован: 30.08.2011 09:39:38

Re: Как вставить элемент в середину массива.

Сообщение debi12345 » 01.01.2012 20:03:36

Многократно оптимизирванный для больших массивов (код Мартина из MSEGUI):

Код: Выделить всё
procedure insertitem(var dest: integerarty; index: integer; value: integer);
begin
setlength(dest,high(dest) + 2);
move(dest[index],dest[index+1],(high(dest)-index) * sizeof(dest[0]));
dest[index]:= value;
end;

procedure insertitem(var dest: realarty; index: integer; value: realty);
begin
setlength(dest,high(dest) + 2);
move(dest[index],dest[index+1],(high(dest)-index) * sizeof(dest[0]));
dest[index]:= value;
end;

procedure insertitem(var dest: complexarty; index: integer; value: complexty);
begin
setlength(dest,high(dest) + 2);
move(dest[index],dest[index+1],(high(dest)-index) * sizeof(dest[0]));
dest[index]:= value;
end;

procedure insertitem(var dest: pointerarty; index: integer; value: pointer);
begin
setlength(dest,high(dest) + 2);
move(dest[index],dest[index+1],(high(dest)-index) * sizeof(dest[0]));
dest[index]:= value;
end;

procedure insertitem(var dest: winidarty; index: integer; value: winidty);
begin
setlength(dest,high(dest) + 2);
move(dest[index],dest[index+1],(high(dest)-index) * sizeof(dest[0]));
dest[index]:= value;
end;

procedure insertitem(var dest: stringarty; index: integer; value: string);
begin
setlength(dest,high(dest) + 2);
move(dest[index],dest[index+1],(high(dest)-index) * sizeof(dest[0]));
pointer(dest[index]):= nil;
dest[index]:= value;
end;

procedure insertitem(var dest: msestringarty; index: integer; value: msestring);
begin
setlength(dest,high(dest) + 2);
move(dest[index],dest[index+1],(high(dest)-index) * sizeof(dest[0]));
pointer(dest[index]):= nil;
dest[index]:= value;
end;
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

Рейтинг@Mail.ru