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

Вниз

Быстрое копирование динамических массивов   Найти похожие ветки 

 
kravchuk ©   (2003-03-31 18:07) [0]

Подскажите, плз, самый быстрый способ копирования динамических
массивов.
<p>Например:</p>
<p> var Src,Dest : array of array of real; </p>
<p>как оптимально массиву Dest присвоить все значения и
структуру массива Src?</p>


 
MBo ©   (2003-03-31 18:11) [1]

SetLength и присвоение Dest:=Src
можно также move - для каждого подмассива второго уровня


 
han_malign ©   (2003-03-31 18:30) [2]

> присвоение Dest:=Src
If X and Y are variables of the same dynamic-array type, X :=Y points X to the same array as Y. (There is no need to allocate memory for X before performing this operation.) Unlike strings and static arrays, dynamic arrays are not automatically copied before they are written to.
- не вводите в заблуждение...
Только SetLength+(SetLength + move по подмассивам).


 
MBo ©   (2003-03-31 18:37) [3]

>han_malign
Согласен. Был неправ.


 
icWasya ©   (2003-03-31 19:11) [4]

может так
Dest:=Copy(Src);


 
Shaman_Naydak ©   (2003-03-31 19:17) [5]

var i: Integer;
begin
i:=Length(Src);
SetLength(Dst, i);
for i:=0 to i-1 do
Dst[i]:=Copy(Src[i]);

В данном конкретном случае (двухмерного массива)


 
Shaman_Naydak ©   (2003-03-31 19:18) [6]

>
icWasya

Вася, ты не прав! Твой вариант подойдет только для одномерного!


 
Palladin ©   (2003-03-31 19:19) [7]


> icWasya © (31.03.03 19:11)

скопируется массив указателей
и move быстрей


 
kravchuk ©   (2003-04-01 11:40) [8]

я нашел в файле system.pas функцию
procedure CopyArray(dest, source, typeInfo: Pointer; cnt: Integer);
она может помочь в данном случае?
и если да то как ней пользоваться?


 
Palladin ©   (2003-04-01 12:28) [9]


> kravchuk © (01.04.03 11:40)

ты зачем сюда пришел? ответы почитать?
дык читай... тебе написали уже ответ...
Shaman_Naydak © (31.03.03 19:17)
используй делай выводы


 
kravchuk ©   (2003-04-01 12:59) [10]

>Palladin © (01.04.03 12:28)
Ответы я уже прочитал, это второй вопрос




 
malkolinge ©   (2003-04-01 13:04) [11]

А почему все забыли про
VararrayLock
VararrayUnLock
Что это такое читайте в Хлпе или Калверте


 
Palladin ©   (2003-04-01 13:16) [12]


> malkolinge © (01.04.03 13:04)

а причем тут это?


> kravchuk © (01.04.03 12:59)

в справке copyarray не освещена, так что наверное не стоит, в любом случае тебе посоветовали
Move


 
kravchuk ©   (2003-04-01 13:17) [13]

>malkolinge © (01.04.03 13:04)
VararrayLock, VararrayUnLock испльзуются, насколько я понимаю, для variant- массивов


 
les ©   (2003-04-01 14:39) [14]

Етот вопрос уже когда то поднимали. Я тогда тоже нашел CopyArray (она не публикуется но есть _DynArrayCopy и др.) Сам не пробовал, но насколько можно судить ети функции универсальни - они должни копировать любой дин. масив (двумерний т.д.).

Способ копирования дин. массивов определенно должен бить - ведь копирует же Delphi дин. массив переданий в процедуру по значению. Проблема такая что именно в етом случае (т.е. передача по значению) говорят есть баг в компиляторе (во всяком случае в D5). Поетому попробуй но осторожно.


 
malkolinge ©   (2003-04-01 14:49) [15]


> VararrayLock, VararrayUnLock испльзуются, насколько я понимаю,
> для variant- массивов

Ой не заметил, я регшил, что динамический вариантный массив. Зарапартовался сорри


 
han_malign ©   (2003-04-01 14:56) [16]

> Я тогда тоже нашел CopyArray (она не публикуется но есть _DynArrayCopy и др.)
- compiler magic, эти функции как раз вызываются при использовании Copy и SetLength...


 
kravchuk ©   (2003-04-01 15:38) [17]

>les © (01.04.03 14:39)
посмотрел я процедуру _DynArrayCopy,
использовал ли ее кто то? как получить TDynArrayTypeInfo у существующего динамического массива?


 
les ©   (2003-04-01 22:47) [18]

Ти знаешь я посмотрел борландовские групи, кажется все таки простое Copy (без параметров Index и Count) т.е. > icWasya © (31.03.03 19:11) - но тут свои проблеми (уже сказано).

Что касается > _DynArrayCopy наверное > han_malign © (01.04.03 14:56) прав.


 
les ©   (2003-04-01 22:53) [19]


> как получить TDynArrayTypeInfo у существующего динамического
> массива?

Можно попробовать function TypeInfo(TypeIdent): Pointer; но сомневаюсь что так ми витянем больше чем через простое Copy. В любом случае посмотри http://www.tamaracka.com - ето поиск по борландовским групам.



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

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

Наверх




Память: 0.51 MB
Время: 0.024 c
3-44081
Pontic
2003-03-26 19:19
2003.04.14
Проблема с Interbase


14-44426
Adolf
2003-03-28 16:28
2003.04.14
Крутой кекс


14-44378
LMD
2003-03-26 14:21
2003.04.14
Как получить имя объекта через sender?


8-44276
Val188
2003-01-09 14:52
2003.04.14
Картинка из видео ?


6-44287
Dx_com
2003-02-19 20:15
2003.04.14
Смена IP и маски подсети в ХР или NT