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

Вниз

увеличение дин.массива   Найти похожие ветки 

 
вопрос   (2009-06-17 13:39) [0]


 var A:array of Byte;
begin
 SetLength(A,1);
 A[0]:=5;
 // и тут вдруг я понял, что одного элемента мне не достаточно. Необходимо увеличить размер существующего массива.
end;


Мои мысли :
SetLength(A,2);    // ячейка A[0] возможно разрушится
 SetLength(A,A+1);  // Error:Operator not applicable to this operand type

А как правильно пока не пойму ((


 
Palladin ©   (2009-06-17 13:40) [1]

Length +  F1


 
brother ©   (2009-06-17 13:40) [2]

> ячейка A[0] возможно разрушится

проверь

> SetLength(A,A+1);

а так: SetLength(A,Sizeof(A)+1)


 
вопрос   (2009-06-17 13:41) [3]

Т.е. SetLength(A,Length(A)+1);
спасибо


 
brother ©   (2009-06-17 13:43) [4]

> Length +  F1

добрее надо быть в начинающих ;)
вон в http://delphimaster.net/view/15-1245096963/ что творится))))


 
Palladin ©   (2009-06-17 13:45) [5]


> brother ©   (17.06.09 13:43) [4]

я сама доброта...


 
brother ©   (2009-06-17 13:45) [6]

;)


 
{RASkov} ©   (2009-06-17 14:03) [7]

> [0] вопрос   (17.06.09 13:39)
> Мои мысли :
> SetLength(A,2);    // ячейка A[0] возможно разрушится

SetLength не изменяет содержимое динмассива, только его длинну...
т.е. если увеличиваем Length - то после имеющихся данных будет "мусор" (нули, nil"ы, "")
если уменьшаем, то просто обрезаются данные...
Было:
12345
стало после увеличения:
12345мммммм (м - "мусор")
или после уменьшения
123


 
Нат ©   (2009-06-17 14:18) [8]

В целях уменьшения фрагментации памяти, рекомендуется выделять память блоками.
Нужен ли здесь динамический массив?
Если действительно нужен выделяйте наиболее ожидаемое количество с запасом, например, на 10 элементов.


 
sniknik ©   (2009-06-17 16:19) [9]

> стало после увеличения:
> 12345мммммм (м - "мусор")
значения динамических обьектов, массивов, строк инициализируются.

т.е. будет
12345000000


 
MsGuns ©   (2009-06-17 17:24) [10]

>Нат ©   (17.06.09 14:18) [8]
>Если действительно нужен выделяйте наиболее ожидаемое количество с запасом, например, на >10 элементов.

А зачем ? Простой тест на "скорострельность" убедительно демонстрирует шустрость резервирования массива по единичке по сравнению, например, с добавлением строки в список (TStrings)


 
Нат ©   (2009-06-17 17:34) [11]

Из-за дефрагментации памяти.


 
Ega23 ©   (2009-06-17 17:43) [12]


> А зачем ? Простой тест на "скорострельность" убедительно
> демонстрирует шустрость резервирования массива по единичке
> по сравнению, например, с добавлением строки в список (TStrings)
>


Пардон, как демонстрирует? И где тут "тормоза"?

procedure TStringList.InsertItem(Index: Integer; const S: string; AObject: TObject);
begin
 Changing;
 if FCount = FCapacity then Grow;
 if Index < FCount then
   System.Move(FList^[Index], FList^[Index + 1],
     (FCount - Index) * SizeOf(TStringItem));
 with FList^[Index] do
 begin
   Pointer(FString) := nil;
   FObject := AObject;
   FString := S;
 end;
 Inc(FCount);
 Changed;
end;


 
oldman ©   (2009-06-17 20:30) [13]


> и тут вдруг я понял, что одного элемента мне не достаточно.


Вообще-то перед кодингом задачу надо анализировать. Вдумчиво.
В плане разработки на анализ выделяется время, учти.



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

Форум: "Начинающим";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
15-1244838605
Юрий
2009-06-13 00:30
2009.08.16
С днем рождения ! 13 июня 2009 суббота


15-1245438799
Johnnnnn
2009-06-19 23:13
2009.08.16
Доступ к книге excel на сервере?


15-1245179158
Cyrax
2009-06-16 23:05
2009.08.16
Как называется крутилка с цыфырками на командирских часах ?


2-1245418903
Student85236
2009-06-19 17:41
2009.08.16
ClientSocket в Таймере


2-1245663388
OlegNik
2009-06-22 13:36
2009.08.16
Имя файла но короче.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский