Advertisement
mrlolthe1st

Untitled

Aug 12th, 2021
1,625
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.91 KB | None | 0 0
  1. Type
  2.     TVectorType = LongInt;
  3.     TVector = Record
  4.         Size, Capacity : LongInt;
  5.         Nodes : Pointer;
  6.     End;
  7.     PVectorType = ^TVectorType;
  8.  
  9. Var
  10.     A : TVector;
  11.  
  12. Procedure InitVector(Var V : TVector);
  13. Begin
  14.     V.Size := 0;
  15.     V.Capacity := 0;
  16.     V.Nodes := Nil;
  17. End;
  18.  
  19. Procedure PushBack(Var V : TVector; Element : TVectorType);
  20. Var
  21.     Elem: PVectorType;
  22. Begin
  23.     If V.Size = V.Capacity Then
  24.     Begin
  25.         If V.Capacity = 0 Then Inc(V.Capacity);
  26.         Inc(V.Capacity, V.Capacity);
  27.         V.Nodes := ReAllocMem(V.Nodes, V.Capacity * SizeOf(TVectorType));
  28.     End;
  29.     Elem := V.Nodes;
  30.     Inc(Elem, V.Size);
  31.     Elem^ := Element;
  32.     Inc(V.Size);
  33. End;
  34.  
  35. Procedure ShrinkToFit(Var V : TVector);
  36. Begin
  37.     V.Nodes := ReAllocMem(V.Nodes, V.Size * SizeOf(TVectorType));
  38.     V.Capacity := V.Size;
  39. End;
  40.  
  41. Function PopBack(Var V : TVector) : PVectorType;
  42. Var
  43.     X : PVectorType;
  44. Begin
  45.     Dec(V.Size);
  46.     X := V.Nodes;
  47.     Inc(X, V.Size);
  48.     PopBack := X;
  49. End;
  50.  
  51. Function VectorAt(Var V : TVector; Index : LongInt) : PVectorType;
  52. Var
  53.     X : PVectorType;
  54. Begin
  55.     X := V.Nodes;
  56.     Inc(X, Index);
  57.     VectorAt := X;
  58. End;
  59.  
  60. Procedure PrintVector(Var V : TVector);
  61. Var
  62.     I : LongInt;
  63.     Elem: PVectorType;
  64. Begin
  65.     WriteLn('Vector size is: ', V.Size);
  66.     Elem := V.Nodes;
  67.     For I := 0 To V.Size - 1 Do
  68.     Begin
  69.         Write(Elem^, ' ');
  70.         Inc(Elem);
  71.     End;
  72. End;
  73.  
  74. Procedure FreeVector(Var V : TVector);
  75. Begin
  76.     FreeMem(V.Nodes);
  77. End;
  78.  
  79. Begin
  80.     InitVector(A);
  81.     PushBack(A, 1);
  82.     PushBack(A, 2);
  83.     PushBack(A, -1);
  84.     PushBack(A, -3);
  85.     PushBack(A, -3);
  86.     PushBack(A, -3);
  87.     PushBack(A, -3);
  88.     PushBack(A, -3);
  89.     PushBack(A, -3);
  90.     PushBack(A, -3);
  91.     WriteLn(A.Capacity);
  92.     ShrinkToFit(A);
  93.     PushBack(A, -1);
  94.     WriteLn(A.Capacity);
  95.     VectorAt(A, 2)^ := 5;
  96.     PrintVector(A);
  97.     FreeVector(A);
  98. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement