Высокая стоимость доступа к упакованному вектору является причиной, по которой они обычно хранятся в неупакованном виде: каждый компонент распо-
6.1. Структурированные типы данных
251
лагается в начале отведенного ему байта или слова. Тогда упрощается доступ, зато возрастает объем занимаемой памяти. Но с течением времени машины, в которых адресуемой единицей памяти является байт, вытесняют те, в которых такими единицами служат слова; в связи с этим вопрос о выборе между описанными представлениями в настоящее время возникает довольно редко.
Рис. 6.4. Несмежные области хранения дескриптора и компонентов массива
Операции над векторами как отдельными объектами. Операции над векторами как отдельными объектами легко реализуются в случае последовательного представления вектора в памяти. Присвоение одного вектора другому, имеющему такие же атрибуты, реализовано как простое копирование содержимого блока памяти, представляющего первый вектор, в блок памяти, который представляет второй вектор (дескрипторы переписывать не нужно, потому что они одинаковые). Арифметические операции над векторами и такие специальные операции, как их скалярное произведение реализуются как циклы, в которых последовательно обрабатываются компоненты векторов.
Основная проблема реализации таких операций с векторами связана с ресурсами памяти, необходимыми для хранения результатов этих операций. В резуль-
252
Глава 6. Инкапсуляция
тате сложения двух векторов, состоящих из ста элементов, получается третий вектор того же размера. В том случае, если полученный результат тут же не присваивается какому-либо существующему объекту, представленному своим /-значением, для хранения r-значения результата сложения требуется временно выделить для него память. Если в программе таких операций много, то общий объем памяти, необходимой для хранения промежуточных результатов, может оказаться достаточно большим и управление распределением этих дополнительных блоков памяти может значительно усложнить выполнение программы и увеличить ее стоимость.
Многомерныемассивы
Вектор — это одномерный массив; матрица, составленная из строк и столбцов, является двухмерным массивом, трехмерный массив состоит из двухмерных плоскостей, содержащих строки и столбцы. Аналогично можно сконструировать массив любой размерности из массивов меньших размерностей. Представление в памяти векторов и формула доступа к отдельным элементам векторов легко могут быть обобщены на случай многомерных массивов.
Спецификация и синтаксис. Атрибуты многомерного массива отличаются от атрибутов вектора только тем, что требуется указывать диапазон изменения значений индекса для каждого измерения отдельно, как, например, в следующем объявлении языка Pascal:
В: array[1..10, -5..5] of real:
Выбор компонента требует указания одного индекса для каждого измерения (например, В[2.4] для двухмерного массива).
Реализация. Матрицу удобно реализовать, если рассматривать ее как вектор, состоящий из векторов; трехмерный массив можно рассматривать как вектор, компонентами которого являются матрицы и т. д. Заметим, что все эти компоненты должны, в свою очередь, состоять из одинакового количества элементов одного типа.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.