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

Вниз

заполнить список nil   Найти похожие ветки 

 
Дмитрий   (2011-05-06 17:01) [0]

у меня есть одномерный массив (FArrayLinkers) размера N. Нужно создать список объектов - TObjectList такого же размера как и массив, каждому айтему присвоив - nil. Сейчас это делаю в цикле. Это правильно или можно как-то иначе?

FLinkerItems := TObjectList.Create;
     for I := Low(FArrayLinkers) to High(FArrayLinkers)
       FLinkerItems.Add(nil);


 
RWolf ©   (2011-05-06 17:10) [1]

FLinkerItems := TObjectList.Create;
FLinkerItems.Count:=N;


 
Ega23 ©   (2011-05-06 17:24) [2]


> RWolf ©   (06.05.11 17:10) [1]

FLinkerItems.Count:=N;
неправда твоя, там не nil будет, там будет неизвестно что.


 
Ega23 ©   (2011-05-06 17:28) [3]


> Это правильно или можно как-то иначе?

По-идее быстрее будет
list.Count := N;
for i := 0 to N - 1 do
 list[i] := nil;

Хотя тут чёрт его знает. Тестить надо.


 
RWolf ©   (2011-05-06 17:31) [4]


> Ega23 ©   (06.05.11 17:24) [2]
> неправда твоя, там не nil будет, там будет неизвестно что.

Цитата из хелпа D7:
Increasing the size of Count will add the necessary number of nil (Delphi) or NULL (C++) pointers to the end of the Items array.


 
Palladin ©   (2011-05-06 17:33) [5]

ZeroMemory(list.List^, list.Count * SizeOf(Pointer));

)


 
Palladin ©   (2011-05-06 17:34) [6]

твоя правда

procedure TList.SetCount(NewCount: Integer);
var
 I: Integer;
begin
 if (NewCount < 0) or (NewCount > MaxListSize) then
   Error(@SListCountError, NewCount);
 if NewCount > FCapacity then
   SetCapacity(NewCount);
 if NewCount > FCount then
   FillChar(FList^[FCount], (NewCount - FCount) * SizeOf(Pointer), 0)
 else
   for I := FCount - 1 downto NewCount do
     Delete(I);
 FCount := NewCount;
end;


 
Ega23 ©   (2011-05-06 17:34) [7]


> Цитата из хелпа D7:
> Increasing the size of Count will add the necessary number
> of nil (Delphi) or NULL (C++) pointers to the end of the
> Items array.


D2010


procedure TList.SetCount(NewCount: Integer);
var
 I: Integer;
 Temp: Pointer;
begin
 if (NewCount < 0) or (NewCount > MaxListSize) then
   Error(@SListCountError, NewCount);
 if NewCount <> FCount then
 begin
   if NewCount > FCapacity then
     SetCapacity(NewCount);
   if NewCount > FCount then
     FillChar(FList^[FCount], (NewCount - FCount) * SizeOf(Pointer), 0)
   else
   if ClassType <> TList then
   begin
     for I := FCount - 1 downto NewCount do
     begin
       Dec(FCount);
       Temp := List^[I];
       if Temp <> nil then
         Notify(Temp, lnDeleted);
     end;
   end;
   FCount := NewCount;
 end;
end;

procedure TList.SetCapacity(NewCapacity: Integer);
begin
 if (NewCapacity < FCount) or (NewCapacity > MaxListSize) then
   Error(@SListCapacityError, NewCapacity);
 if NewCapacity <> FCapacity then
 begin
   ReallocMem(FList, NewCapacity * SizeOf(Pointer));  // Вот оно
   FCapacity := NewCapacity;
 end;
end;



 
Ega23 ©   (2011-05-06 17:35) [8]

А, да. Не увидел
if NewCount > FCount then
    FillChar(FList^[FCount], (NewCount - FCount) * SizeOf(Pointer), 0)

Был неправ, прошу прощения.


 
Palladin ©   (2011-05-06 17:35) [9]


> Ega23 ©   (06.05.11 17:34) [7]

не заметил )

if NewCount > FCount then
     FillChar(FList^[FCount], (NewCount - FCount) * SizeOf(Pointer), 0)


 
RWolf ©   (2011-05-06 17:36) [10]


> Ega23 ©   (06.05.11 17:34) [7]

ну так обнуляет же,
сначала вызывается SetCapacity(NewCount), потом FillChar.



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

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

Наверх





Память: 0.46 MB
Время: 0.004 c
2-1304432758
Drowsy
2011-05-03 18:25
2011.08.14
При закрытии программы появляется ошибка "Access violation".


6-1240473036
MultIfleX
2009-04-23 11:50
2011.08.14
win pcap


1-1261140235
vlad2
2009-12-18 15:43
2011.08.14
Максимальное количество Series в TChart?


15-1301585177
R_R
2011-03-31 19:26
2011.08.14
Как в C# добавить поле в класс, которое заранее не объявлено?


2-1304541565
vasja666
2011-05-05 00:39
2011.08.14
Сумма в бд (sql запрос)





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