![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сложить динамические массивы?
REA © (2003-01-27 19:00:00)Сделал функцию, которая возвращает динамический массив. Как бы теперь ее результат присуммировать в конец другого массива желательно без CopyMemory (например Slice, Copy) и т.п. Строки ведь можно плюсом складывать...
gsu (2003-01-27 20:28:00) [1]т.е к концу а цепляется начало b, здорово
Sha (2003-01-27 20:15:00) [2]2 REA © (27.01.03 19:00)
Вот эквивалент для a:=a+b; (еслибы так было можно писать).
SetLength(a,Length(a)+Length(b));
System.Move(b[0],a[Length(a)],Length(b)*SizeOf(b[0]);
gsu (2003-01-27 19:45:00) [3]>> сначала то уменьшится
С самого начала увеличится от 0 до 1 (-:|~
REA (2003-01-27 19:42:00) [4]Ну потом то понятно, что увеличится, но сначала то уменьшится.
gsu (2003-01-27 19:32:00) [5]>> Или лучше первому сначала явно Nil присвоить
и первый сгинет в небытие
просто переприсваивай, а ненужные указатель заниляй
>> если в массиве что-то есть и ему присвоить другой, то его счетчик ссылок
>> уменьшится
увеличится
>> массив уничтожится
когда не будет ни одного указателя на него, т.е a,b, ...:=nil
REA (2003-01-27 19:26:00) [6]Ну да. Они же пойнтеры вроде почти за исключением того, что Delphi отслеживает счетчик ссылок на массив. Хотя видимо если в массиве что-то есть и ему присвоить другой, то его счетчик ссылок уменьшится и став равным 0 массив уничтожится.
gsu (2003-01-27 19:15:00) [7]>> одному дин. массиву присвоить другой
как a:=b ?
REA (2003-01-27 19:14:00) [8]А не будет ли утечки памяти, если одному дин. массиву присвоить другой? Или лучше первому сначала явно Nil присвоить?
gsu (2003-01-27 19:07:00) [9](-:|~
ежли узнаешь кинь на мыло, оки ?
REA (2003-01-27 19:06:00) [10]Да поэлементно то понятно что можно...
gsu (2003-01-27 19:03:00) [11]д. массивы (данные) целиком вообще не копируются (у мя, если кто умеет покажите, плиз)
а у тя я бы установил длину 1 массива и поэлементно ...