<<
>>

Динамические массивы

Динамическим называется массив с таким динамическим связыванием по диапазонам индексов и размещению в памяти, которое повторяется многократно в течение всего жизненного цикла массива.
Преимущество: максимальная гибкость. Массив по мере необходимости может расти или сжиматься прямо в ходе выполнения программы. Недостаток — на многократное размещение (удаление) в куче тратится много времени (и все оно приходится на период вычислений).

В языках C и C++ статическими являются массивы, которые объявляются в функциях со спецификатором static.

Массивы, объявленные в функциях C и C ++ без спецификатора static, считаются явными стековыми массивами.

Как показано ниже, массивы языка Ada могут быть стековыми:

250

Глава 10. Составные типы данных

В этом фрагменте с помощью процедуры get вводится размер Size для массива Vector, который затем динамически размещается в памяти при переходе к блоку declare.
Когда выполнение доходит до закрывающей скобки блока, массив Vector из памяти удаляется.

Языки C и C++ также обеспечивают явные динамические массивы. В этом случае используются стандартные библиотечные функции malloc и free, которые являются операциями для размещения в куче и удаления из нее соответственно. В языке C++ для управления кучей применяют операторы new и delete. Имя массива здесь рассматривается как указатель на набор ячеек памяти; указатель может индексироваться.

В языке Java все не родовые массивы считаются явными динамическими. После создания эти массивы сохраняют связывание по диапазонам индексов и памяти.

Язык C# также обеспечивает данную разновидность массивов.

Кроме того, язык C# обеспечивает родовые динамические массивы, которые являются объектами класса List. Первоначально эти объекты-массивы считаются пустыми и создаются оператором:

List stringList = new List();

Элементы к объекту добавляются методом Add: stringList.Add("Liza");

Доступ к элементам этих массивов организуется через индексирование.

Язык Java содержит родовой класс ArrayList, подобный классу List из языка C#. Разница лишь в том, что здесь индексирование не применяется — для доступа к элементам должны использоваться методы get и set.

В языке Perl массив может быть увеличен с использованием push (добавить один и более элементов в конец массива) и unshift (добавить один и более элементов в начало массива) или указанием элемента массива с использованием индекса, значение которого больше последнего индекса массива. Массив может быть сокращен до пустого за счет присвоения ему пустого списка, задаваемого символами ( ). Длина массива вычисляется сложением значения последнего индекса с единицей.

Подобно Perl, язык JavaScript обеспечивает рост массивов с помощью методов push и unshift, а также сокращение (установкой массива в состояние пустого списка). Отрицательные индексы здесь не поддерживаются.

Массивы в JavaScript могут быть разреженными, в которых значения индексов не образуют непрерывную последовательность. Рассмотрим массив по имени list из 12 элементов и с диапазоном индексов 0..11. Выполним следующий оператор присваивания: list[70] = 47;

Теперь массив list имеет 13 элементов и длину 71. Элементы с индексами 12..69 не определены, для их хранения память не нужна. Ссылка на несуществующий элемент в массивах JavaScript считается неопределенной.

Массивы в языках Python, Ruby и Lua увеличивают или с помощью методов для добавления элементов, или путем соединения с другими массивами. Языки Ruby и Lua поддерживают отрицательные индексы, а Python — нет. В языках Python, Ruby, и Lua элемент или сечение массива можно удалить. Ссылка на несуществующий

Массивы

251

элемент в языке Python приводит к ошибке периода выполнения, а в языках Ruby и Lua считается неопределенной (донесение об ошибке не формируется).

В функциональном языке ML массивы не определены, но широко используются в такой реализации языка, как SML/NJ. Массивы функционального языка F# подобны массивам в C#. Для обработки массивов в язык F# включен оператор foreach.

<< | >>

Еще по теме Динамические массивы:

  1. 18.5. Права и обязанности держателя (обладателя) по работе с массивами персональных данных
  2. СТЕРЕОТИП ДИНАМИЧЕСКИЙ
  3. ПСИХОЛОГИЯ ДИНАМИЧЕСКАЯ
  4. АНАЛИЗ КАУЗАЛЬНО-ДИНАМИЧЕСКИЙ
  5. Динамическая медитация
  6. В динамических методах
  7. ПСИХИКА: ПОНИМАНИЕ ДИНАМИЧЕСКОЕ
  8. Динамический смысл аспектов
  9. ПРОЦЕСС ПСИХИЧЕСКИЙ: ХАРАКТЕРИСТИКА ДИНАМИЧЕСКАЯ
  10. 46. Динамические процессы в малой группе
  11. ЛЕКЦИЯ 12 2.3. Динамические процессы городской жизни
  12. СОЦИОЛОГИЧЕСКИЙ АНАЛИЗ СЕМЬИ В ЕДИНСТВЕ СТРУКТУРНЫХ И ДИНАМИЧЕСКИХ КООРДИНАТ
  13. СТРЕМЛЕНИЕ
  14. 18.6. Государственное регулирование работы с персональными данными
  15. Розовый
  16. ПРОЦЕСС ПСИХИЧЕСКИЙ