Cтраница 1
Изменение размеров массива - мощная, но несколько опасная методика. Работая с массивом, Delphi не определяет его размер. В программе SizeArr Delphi воспринимает массив как указатель, содержащий миллион ячеек. Если программа фактически выделила память только для 10 элементов, Delphi не определит по-пыткудоступак 100-муэлементу как ошибку. [1]
При каждом изменении размера массива MATLAB заиоио выделяет для пего блок памяти. [2]
Это сокращает количество изменений размера массива при добавлении или удалении элементов. [3]
Программа Gaibage при изменении размера массива добавляет еще 50 % пустых ячеек и всегда оставляет как минимум одну свободную ячейку при любом изменении размера. Эти значения были выбраны для упрощения работы пользователя со списком. В реальной программе процент свободной памяти должен быть меньше, и минимальное число свободных элементов - больше. Оптимальными являются значения порядка 10 % текущего размера списка и 10 свободных ячеек. [4]
Для динамических массивов Delphi 4 алгоритм добавления элемента в конец списка будет еще проще - при изменении размера массива программа автоматически создает новый и копирует в него содержимое старого. [5]
При такой схеме список будет содержать несколько свободных ячеек, однако их число мало, и липшие затраты памяти невелики. Свободные ячейки позволяют вам перестраховаться от изменения размеров массива всякий раз, когда необходимо добавить или удалить элемент из списка. Фактически, если вы постоянно добавляете или удаляете только один или два элемента, вам может никогда не понадобиться изменять размер массива. [6]
![]() |
Тестер для класса Array ( часть б из 7. [7] |
Оба массива после этого выводятся на печать для подтверждения правильности присваивания. Как мы увидим, перегруженная операция присваивания выполняет изменение размера массива скрытым от вызвавшей операцию программы образом. [8]
Если вам нужен списокиз 1000 элементов ккоторому обычно добавляется по 100 элементов, на изменение размеров массива будет тратиться слишком много времени. [9]
К сожалению, это не так; будет инициализирован только первый элемент. Заметьте, от нас требуют дважды указать 10, что может привести к случайной ошибке при изменении размеров массива. [10]
Эта процедура перемещает все непомеченные элементы в начало массива. После этого они добавляются к неиспользуемым элементам в конце массива. Когда вам потребуется включить в список дополнительные элементы, можно повторно использовать помеченные ячейки без изменения размера массива. [11]