Применение динамических массивов

Динамические массивы предназначены для хранения данных с изменяющейся структурой. Например, необходимо хранить или передавать данные о группах автомобилей, проезжающих через заданный участок дороги в течении определенных отрезков времени. Количество и типы автомобилей все время меняются, следовательно, необходимо использовать динамический массив. Никакой другой тип данных для этого не подходит.

Обращение к динамическому массиву осуществляется с помощью специального указателя, который может храниться в переменных типа HANDLE. При этом важно помнить, что если одной переменной типа HANDLE присвоить значение другой, хранящей указатель на массив, то при этом новый  создан не будет. Первая переменная будет указывать на старый массив. После этого к нему можно будет обращаться либо через первый, либо через второй указатель. Работа с массивом осуществляется с помощью специальных функцийDArray_function.


Создание массива

 Для того, чтобы создать новый массив необходимо использовать функцию New()New


Структура массива

Динамические массивы состоят из отдельных элементов. Обращение к любому элементу осуществляется по его порядковому номеру. Нумерация начинается с нуля. Количество элементов в массиве находится с помощью функции vGetCount()vGetCount


Добавление элементов

Только что созданный массив не имеет элементов. Новые элементы вставляются только в конец с помощью функции vInsert()vInsert

Тип элементов может быть как структурой, состоящей из нескольких полей базового типа, так и одним из базовых. В последнем случае элемент является и полем. Определить какой тип имеет заданный элемент можно с помощью функции vGetTypevGetType. Изменить значение произвольного существующего элемента позволяет vSetvSet


Доступ к значениям элементов

Функция vInsert()vInsert, вставляя в массив новый элемент типа структуры, присваивает его полю значение по умолчанию. Для изменения значения поля в элементе необходимо использовать vSetvSet. Важно помнить, что эта функция изменяет не значение элемента, а значение поля. Для того, чтобы прочитать значение поля применяются функции vGetF()vGetF, vGetS()vGetS, vGetH()vGetH. Каждая из них предназначена только для одного типа поля. Первая - для FLOATType_FLOAT, вторая - для STRINGType_STRING, третья - для HANDLEType_HANDLE.


Удаление массива

Функция vDelete()vDelete удаляет элемент массива. Удалить можно любой элемент, вне зависимости от того, где он расположен: в начале, в середине или в конце. Если после удаленного элемента находились еще элементы, то они сдвигаются к началу. Нельзя удалить отдельное поле в элементе, только весь элемент целиком.

Для удаления пустого массива нужно вызвать функцию Delete()Delete. При этом дескриптор массива обнуляется. Удалять желательно именно пустые (не содержащие ни одного элемента) массивы. В противном случае все элементы останутся в памяти, что приведет к нерациональному ее использованию. Если требуется удалить все используемые массивы, то используется vClearAll()vClearAll.


Сортировка массива

Функция vSort()vSort сортирует массив по заданному списку полей. Если массив имеет структуру базового типа, то имя поля можно не указывать. Сортировка может быть выполнена как по возрастанию, так и по убыванию.


Запись массива

Динамические массивы не сохраняются вместе с остальными переменными при записи состояния имиджа. Это связано с тем, что он относится не к конкретному имиджу, а ко всему проекту. Поэтому предусмотрены функции для записи массивов в поток и для загрузки из потока. vSaveVSave - запись в поток, vLoadVLoad - загрузка из потока.

Created with the Personal Edition of HelpNDoc: Effortlessly bring your documentation online with HelpNDoc