Jump to content

Контейнер (абстрактный тип данных)

(Перенаправлено из «Контейнер (программирование)

В информатике контейнер . — это класс или структура данных [ 1 ] [ 2 ] чьи экземпляры являются коллекциями других объектов. Другими словами, они хранят объекты организованным образом с соблюдением определенных правил доступа.

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

Структуры данных-контейнеры обычно используются во многих типах языков программирования .

Функция и свойства

[ редактировать ]

Контейнеры можно охарактеризовать следующими тремя свойствами:

  • access — это способ доступа к объектам контейнера. В случае массивов доступ осуществляется по индексу массива. В случае стеков доступ осуществляется в соответствии с порядком LIFO (последний вошел — первый вышел), а в случае очередей — в порядке FIFO (первым вошел — первым вышел);
  • Storage — способ хранения объектов контейнера;
  • traversal — это способ обхода объектов контейнера.

Ожидается, что классы-контейнеры будут реализовывать CRUD -подобные методы для выполнения следующих действий:

  • создать пустой контейнер (конструктор);
  • вставлять объекты в контейнер;
  • удалять объекты из контейнера;
  • удалить все объекты в контейнере (очистить);
  • получить доступ к объектам в контейнере;
  • получить доступ к количеству объектов в контейнере (count).

Контейнеры иногда реализуются совместно с итераторами .

Контейнеры можно классифицировать как контейнеры с одним значением или ассоциативные контейнеры .

Контейнеры с одним значением хранят каждый объект независимо. Доступ к объектам можно получить напрямую, с помощью конструкции языкового цикла (например, for Loop ) или с помощью итератора .

Ассоциативный контейнер использует ассоциативный массив , карту или словарь, состоящий из пар ключ-значение, так что каждый ключ появляется в контейнере не более одного раза. Ключ используется для поиска значения, объекта, если он хранится в контейнере. Ассоциативные контейнеры используются в языках программирования в качестве шаблонов классов.

К абстрактным типам данных контейнера относятся:

Общие структуры данных, используемые для реализации этих абстрактных типов, включают:

Графические контейнеры

[ редактировать ]

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

В статически типизированных языках

[ редактировать ]

Абстракции контейнера могут быть написаны практически на любом языке программирования, независимо от его системы типов. [ 3 ] : 273  Однако в строго типизированных объектно-ориентированных языках разработчику может быть несколько сложно писать повторно используемые однородные контейнеры.

Из-за различий в типах элементов это приводит к утомительному процессу написания и хранения коллекции контейнеров для каждого типа элемента. [ 3 ] : 274–276 

Многие типы элементов (например, целые числа или числа с плавающей запятой) по своей сути несовместимы друг с другом из-за занимаемого ими размера памяти и их семантического значения и, следовательно, требуют разных контейнеров (если, конечно, они не являются взаимно совместимыми или конвертируемыми). [ 3 ] : 274–276  Современные языки программирования предлагают различные подходы, помогающие решить проблему: [ 3 ] : 274–281 

Универсальный базовый тип
Тип, который универсально назначается любым другим (например, корневым классом объекта).
Понижение ;
Замена класса
Предыдущие три подхода, описанные выше, используются для слабо типизированных языков; они обычно подразумевают наследование и полиморфизм, общие для типов.
Типы объединения (язык C/C++)
Позволяет хранить типы данных разного размера; Однако трудно гарантировать, какой тип сохраняется в объединении при извлечении, и за этим следует тщательно следить.
Преобразование типов
Шаблоны или дженерики
Обеспечивает возможность повторного использования и типобезопасность; можно рассматривать как обратное наследование. Однако этот подход может потребовать реализации специализации шаблона , что, по общему мнению, является трудоемким процессом, учитывая, что типы различаются своими методами. [ 3 ] : 281 

См. также

[ редактировать ]
  1. ^ Пол Э. Блэк (ред.), запись о структуре данных в Словаре алгоритмов и структур данных . США Национальный институт стандартов и технологий . 15 декабря 2004 г. По состоянию на 4 октября 2011 г.
  2. входных Структура данных в Британской энциклопедии (2009) . Интернет-запись по состоянию на 4 октября 2011 г.
  3. ^ Перейти обратно: а б с д и Бадд, Тимоти (1997). Введение в объектно-ориентированное программирование (2-е изд.). Ридинг, Массачусетс: Аддисон-Уэсли. ISBN  0-201-82419-1 . OCLC   34788238 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 79aa27e6f1b4a75aa9a8a0595374ead5__1720423980
URL1:https://arc.ask3.ru/arc/aa/79/d5/79aa27e6f1b4a75aa9a8a0595374ead5.html
Заголовок, (Title) документа по адресу, URL1:
Container (abstract data type) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)