Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.009 c
14-35417
Елена
2002-07-15 07:32
2002.08.12
Digitman, с Днем Варенья!!!


3-35171
Allig
2002-07-23 09:08
2002.08.12
Маска


4-35490
ДимкаН
2002-06-03 15:16
2002.08.12
Помогите, плз, найти ошибку


7-35479
Apocalypsys
2002-04-24 18:07
2002.08.12
BIOS&Timer


1-35361
roev
2002-07-29 07:36
2002.08.12
поделитесь, у кого есть, ERwin-ом




   Наверх