Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
4-35510
Poirot
2002-06-04 20:11
2002.08.12
Элементы диалогов (см res файл)


3-35175
вумный
2002-07-22 16:04
2002.08.12
Свой DataBase Desktop на Delphi


1-35326
AlexNO
2002-07-29 17:02
2002.08.12
D5:TStringGrid


3-35208
Larisa
2002-07-23 20:46
2002.08.12
Default character set


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский