Текущий архив: 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.48 MB
Время: 0.008 c