Integer Array
Небольшой прототип как создавать массив. Спокойно работает в Delphi 7.
// integer array prototype type TIntegerArray = record Capacity: Integer; Length: Integer; Items: array of Integer; end; PIntegerArray = ^TIntegerArray; // Methods procedure Init(Arr: PIntegerArray); begin Arr^.Length := 0; Arr^.Capacity := 10; SetLength(Arr^.Items, Arr^.Capacity); end; procedure Add(Arr: PIntegerArray; Item: Integer); begin if Arr^.Length = Arr^.Capacity then begin Inc(Arr^.Capacity, Arr^.Capacity); SetLength(Arr^.Items, Arr^.Capacity); end; Arr^.Items[Arr^.Length] := Item; Inc(Arr^.Length); end; procedure Del(Arr: PIntegerArray; Index: Integer); begin if (Index >= Arr.Length) or (Index < 0) then begin raise ERangeError.Create('out of array range'); end; if Index < Arr.Length - 1 then begin Move(Arr^.Items[Index+1], Arr^.Items[Index], (Arr^.Length-Index-1)*SizeOf(Integer)); end; Dec(Arr.Length); end; function Get(Arr: PIntegerArray; Index: Integer): Integer; begin if (Index >= Arr.Length) or (Index < 0) then begin raise ERangeError.Create('out of array range'); end; Result := Arr.Items[Index]; end; function Join(Arr: PIntegerArray): String; var I: Integer; begin Result := ''; if Arr^.Length > 0 then begin Result := IntToStr(Arr^.Items[0]); for I := 1 to Arr^.Length - 1 do begin Result := Result + ',' + IntToStr(Arr^.Items[I]); end; end; end;
Код как использовать массив
var Arr: TIntegerArray; j: Integer; begin Init(@Arr); for j := 0 to 20 do begin Add(@Arr, j + 1); end; Del(@Arr, 7); WriteLn(Join(@Arr)); WriteLn('Item at index 2 ' + IntToStr(Get(@Arr, 2))); end;