ВУЗ:
Составители:
Рубрика:
5
1  Класс «Динамический массив» 
Сформулируем основные требования к классу «Динамический массив». Объ-
екты этого класса должны вести себя как массивы, т.е. представлять собой набор 
элементов, доступ к которым осуществляется по индексу. Размер такого массива 
задается при создании объекта и может меняться в процессе работы программы. 
Договоримся также, что индексация будет производиться с нуля.  
Как
 и в случае класса «Очередь», будем обозначать тип элементов динамиче-
ского масссива через DataType. Например, динамический массив целых помес-
тим в модуль IntArray и положим DataType=integer. Класс динамического 
массива назовем DynArray. При использовании в программе динамических мас-
сивов  с  элементами  разных  типов  будем  уточнять  имя  типа  именем  модуля:  
IntArray.DynArray или 
RealArray.DynArray. 
1.1  Предварительный интерфейс класса «Динамический массив» 
Составим предварительный вариант интерфейса класса DynArray: 
type  
  DynArray=class 
  public 
    constructor Create(n: integer);  
    destructor Destroy; 
    procedure Resize(newsize: integer); 
    procedure Reserve(newcap: integer); 
    function Size: integer; 
    function Capacity: integer; 
    procedure Add(x: DataType); 
    procedure TrimToSize; 
    function GetItem(i: integer): DataType; 
    procedure SetItem(i: integer; x: DataType); 
  end; 
Конструктор Create  создает  динамический  массив  с n элементами,  индек-
сируемый от нуля, деструктор Destroy разрушает его. Функция Size возвраща-
ет количество элементов в
 массиве, процедура Resize устанавливает количество 
элементов равным newsize, а процедура Add добавляет элемент x в конец мас-
сива, увеличивая размер массива на 1. Функция GetItem(i) возвращает значе-
ние i-го элемента массива, а процедура SetItem(i,x) устанавливает значение 
i-го  элемента  массива  равным  x;  если  индекс  i  находится  вне  диапазона 
0..Size-1, то 
генерируется исключение.  
Как  уже  говорилось,  размер  динамического  массива  может  постоянно  ме-
няться  по  ходу  работы  программы.  Например,  при  добавлении  элемента  размер 
увеличивается на 1. Задумаемся, однако, как должен быть реализован метод Re-
