请问数组的大小可以按需分配吗?不是一次性分配10大小或更多个而是我现需要1个就分配一个,后来又需要了再分配2个,再增加2个。(20分)

  • 主题发起人 howard.yao
  • 开始时间
H

howard.yao

Unregistered / Unconfirmed
GUEST, unregistred user!
请问数组的大小可以按需分配吗?不是一次性分配10大小或更多个而是我现需要1个就分配一个,后来又需要2个,再增加2个。 能这样操作吗?如何实现阿?
 
G

guanyue7613

Unregistered / Unconfirmed
GUEST, unregistred user!
采用动态数组,然后用setLength分配内存,对原来已分配的数组拷贝到新数组后,指向nil,然后重新setlength
 
H

howard.yao

Unregistered / Unconfirmed
GUEST, unregistred user!
用链表!可以实现吗?有人给个事例吗?
 
H

howard.yao

Unregistered / Unconfirmed
GUEST, unregistred user!
新发现Delphi中这样分配 SetLength(aArray,Length(aArray)+1)
谢谢LS的了。
 

张辉明

Unregistered / Unconfirmed
GUEST, unregistred user!
考虑到效率,现在的做法是直接用一个大一点的BUF,不够时再增加,你可以看看TLIST等
TStringList是这样分配内存的。
procedure TStringList.Grow;
var
Delta: Integer;
begin
if FCapacity > 64 then
Delta := FCapacity div 4 else
if FCapacity > 8 then
Delta := 16 else
Delta := 4;
SetCapacity(FCapacity + Delta);
end;

procedure TStringList.SetCapacity(NewCapacity: Integer);
begin
ReallocMem(FList, NewCapacity * SizeOf(TStringItem));
FCapacity := NewCapacity;
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
931
SUNSTONE的Delphi笔记
S
S
回复
0
查看
734
SUNSTONE的Delphi笔记
S
顶部