Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.12;
Скачать: CL | DM;

Вниз

Все просто   Найти похожие ветки 

 
Fast   (2002-07-31 15:15) [0]

Как скопировать N элементов из одного массива в другой не используя цикл? (борюсь за скорость)


 
Skier ©   (2002-07-31 15:16) [1]

>Fast
Move(...) ?


 
Fast   (2002-07-31 15:19) [2]

спа.


 
Alx2 ©   (2002-07-31 15:23) [3]

Move тоже не всегда панацея. Бывает, в цикле быстрее получается.
Кстати, размер элементов массива какой? Если-что, можно задействовать 64-битную арифметику.


 
Fast   (2002-07-31 15:35) [4]

размер элементов в 1 байт


 
Leran2002 ©   (2002-07-31 15:47) [5]

Держи может подойдет:

procedure TForm1.Button4Click(Sender: TObject);
var
a,b:array[1..100]of byte;
i:integer;
begin
for i:=1 to 100 do a[i]:=i; // забивка массива "a"

CopyMemory(@b,@a,SizeOf(a)); // из "a" в "b"

for i:=1 to 100 do // проверка
Memo1.Lines.Add(IntToStr(b[i]));
end;


 
Leran2002 ©   (2002-07-31 15:53) [6]

Модифицировал проверку и забивку:

procedure TForm1.Button4Click(Sender: TObject);
const
n=1000;
var
a,b:array[1..n]of byte;
i:integer;
begin
for i:=1 to n do a[i]:=random(256); // забивка массива "a"

CopyMemory(@b,@a,SizeOf(a)); // из "a" в "b"

for i:=1 to n do // проверка
Memo1.Lines.Add(IntToStr(a[i])+"="+IntToStr(b[i]));
end;


 
Alx2 ©   (2002-07-31 15:53) [7]

>Fast (31.07.02 15:35)
Тогда, наверное, будет интересно сравнить move с поэлементным копированием массива типа integer.

procedure TForm1.Button1Click(Sender: TObject);
Type TBytesArray = packed array [1..1024] of byte;
TIntsArray = packed array [1..256] of integer;
Var
A,B : TBytesArray;
k : integer;
begin

for k := 1 to 1024 do A[k] := k; // Заполняем массив значениями k mod 256

for k := 1 to 256 do // копируем содержимое A в B
TIntsArray(B)[k]:=TIntsArray(A)[k];

end;


 
Fast   (2002-07-31 15:58) [8]

а на случай если надо вставить N элементов не с начала, а скажем с M позиции. как сместить адресс?


 
Leran2002 ©   (2002-07-31 16:05) [9]

Держи:
procedure TForm1.Button4Click(Sender: TObject);
const
n=1000;
m=10;
type
MyType=byte;
var
a,b:array[1..n]of MyType;
i:integer;
begin
for i:=1 to n do a[i]:=random(256); // забивка массива "a"
ZeroMemory(@b,SizeOf(MyType)*n); // зануляем массив "b"

CopyMemory(@b[m],@a[m],SizeOf(MyType)*(n-m+1)); // из "a" в "b"

for i:=1 to n do // проверка
Memo1.Lines.Add(IntToStr(a[i])+"="+IntToStr(b[i]));
end;


 
Fast   (2002-07-31 16:05) [10]

>Leran2002 © (31.07.02 15:53)
а на случай если надо вставить N элементов не с начала, а скажем с M позиции. как сместить адресс?



 
Alx2 ©   (2002-07-31 16:06) [11]

1 integer=4 byte
отсюда и считается.
Но сначала надо скорострельность по сравнению с move проверить.


 
Leran2002 ©   (2002-07-31 16:07) [12]

Адрес пишется вообщето с одной "С"... ;-))


 
Fast   (2002-07-31 16:08) [13]

понял
thx


 
Leran2002 ©   (2002-07-31 16:10) [14]

Ну че все нормально... Подошло???


 
Fast   (2002-07-31 16:24) [15]

>Leran2002 © (31.07.02 16:10)
да отлично то что надо



Страницы: 1 вся ветка

Текущий архив: 2002.08.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
3-35172
voyager_s
2002-07-22 00:56
2002.08.12
Печать таблицы в QReport


1-35338
совсем Новенький
2002-07-29 20:01
2002.08.12
АЛГОРИТМЫ трансляции математических выражений. Mapl.


1-35377
BlackSun
2002-07-24 20:22
2002.08.12
PostData


1-35262
V.Turecky
2002-07-30 14:54
2002.08.12
Загрузка из DLL ICO файла...


1-35356
GenaPL
2002-07-30 14:34
2002.08.12
Подскажите хороший редактор баз данных.