Как вставить элемент в середину массива.
Модератор: Модераторы
Как вставить элемент в середину массива.
Здравствуйте! В моей программе есть динамический массив в стиле Delphi. Как вставить в его середину элемент?
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
Универсальное решение "в лоб":
1. Добавляете элемент в конец массива.
2. Поштучно сдвигаете элементы с того места, где нужно вставить новый элемент (что-то типа arr[n]:=arr[n-1] ).
3. На освободившееся в середине массива место ставите новый элемент.
1. Добавляете элемент в конец массива.
2. Поштучно сдвигаете элементы с того места, где нужно вставить новый элемент (что-то типа arr[n]:=arr[n-1] ).
3. На освободившееся в середине массива место ставите новый элемент.
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
Многократно оптимизирванный для больших массивов (код Мартина из 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;