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

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

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

Пример динамического массива на языке "Pascal"

 byteArray : Array of Byte; // Одномерный массив
 multiArray : Array of Array of string;  // Многомерный массив

Динамические массивы (или массивы переменной длины) поддерживаются Delphi, FreePascal, но не Turbo Pascal.

Пример объявления динамического массива на языках C/C++

Одномерный динамический массив:

Создаем массив с 10-ю элементами типа int:

Си:

        int *mas = malloc (sizeof(int) * 10);

С++:

        int *mas = new int[10];

Получить доступ к значению каждого элемента можно по индексу (порядковый номер):

        mas[0] = 2; // присвоили значение 2 нулевому элементу массива mas
        mas[1] = 7; // присвоили значение 7 первому элементу массива mas
        //... и т.д.

Следовательно, если брать такой подход, то вам понадобится около десяти строк кода, чтобы проинициализировать весь массив. Для того, чтобы этого избежать напишем тоже самое в цикле:

       for(int i = 0; i < 10; i++){
               cin>>mas[i]; // пользователь вводит значение каждого i-того элемента массива
       }

После чего работаем с массивом. Также его можно вывести на экран:

       for(int i = 0; i < 10; i++){
               cout << mas[i] << endl;
       }

Для освобождения из памяти одномерного динамического массива используем:

Си:

      free(mas);

С++: оператор delete:

      delete []mas;

Строго говоря вышеописанная реализация массива не является динамической, т.к. нет изменения размера массива во время работы, а всего лишь массивом переменной длины. Возможным решением является realloc, но можно применить только при использовании malloc, но не new. Для того чтобы изменить размер такого массива необходимо объявить еще один массив нужного размера, скопировать в него все данные и освободить память занимаемую старым массивом. В С++ библиотечным решением является std::vector. В С89 нет массивов переменной длины, они есть только в С99 (который поддерживают не все компиляторы). Некоторые (довольно старые) компиляторы С++ также не поддерживают массивов переменной длинны.

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Полезное


Смотреть что такое "Динамический массив" в других словарях:

  • Массив — У этого термина существуют и другие значения, см. Массив (значения). Эту страницу предлагается переименовать в Массив (информатика). Пояснение причин и обсуждение  на странице Википедия:К переименованию/4 ноября 2012. Возможно, её …   Википедия

  • массив электропитания — [Интент] Для индивидуальных пользователей единственным устройством, реально нуждающимся в такой защите, является компьютер. В корпоративной среде, кроме ПК, в обеспечении качественного электропитания нуждаются серверы, коммуникационное… …   Справочник технического переводчика

  • Vector (C++) — Стандартная библиотека языка программирования C++ fstream iomanip ios iostream sstream Стандартная библиотека шаблонов algorithm …   Википедия

  • Ruby — Класс языка: мультипарадигмальный: динамический, объектно ориентиров …   Википедия

  • Object Pascal — Семантика: императивная Класс языка: мультипарадигмальный: императивный, структурный, объектно ориентированный, обобщённый[1], процедурный Тип исполнения: компилируемый …   Википедия

  • Руби IDE — Ruby Семантика: мультипарадигмальный Тип исполнения: интерпретатор Появился в: 1995 г. Автор(ы): Юкихиро Мацумото Последняя версия: 1.9.1 …   Википедия

  • Рубин (язык программирования) — Ruby Семантика: мультипарадигмальный Тип исполнения: интерпретатор Появился в: 1995 г. Автор(ы): Юкихиро Мацумото Последняя версия: 1.9.1 …   Википедия

  • Язык программирования Рубин — Ruby Семантика: мультипарадигмальный Тип исполнения: интерпретатор Появился в: 1995 г. Автор(ы): Юкихиро Мацумото Последняя версия: 1.9.1 …   Википедия

  • Стандартная библиотека языка C++ — Стандартная библиотека языка программирования C++ fstream iomanip ios iostream sstream Стандартная библиотека шаблонов …   Википедия

  • Вектор — Вектор  многозначный термин; величина, характеризующаяся размером и направлением. В Викисловаре есть статья «вектор» …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»