Что такое контейнеры/адаптеры? У меня есть базовые знания C++ и его подтем, таких как (класс/шаблоны/STL).
Кто-нибудь может объяснить на непрофессиональном языке и привести практический пример применения контейнеров/адаптеров?
Что такое контейнеры/адаптеры? У меня есть базовые знания C++ и его подтем, таких как (класс/шаблоны/STL).
Кто-нибудь может объяснить на непрофессиональном языке и привести практический пример применения контейнеров/адаптеров?
<joke>
C++ технический и сложный для понимания :-D</joke>
Контейнеры — это типы данных из STL, которые могут содержать данные.
Пример: vector
как динамический массив
Адаптеры — это типы данных из STL, которые адаптируют контейнер для обеспечения определенного интерфейса.
Пример: stack
предоставление интерфейса стека поверх выбранного контейнера
(примечание: оба на самом деле являются шаблонами, а не типами данных, но так определение выглядит лучше)
Контейнер — это определенная структура данных, которая содержит данные, обычно в неограниченном количестве. Каждый тип контейнера имеет ограничения на эффективный доступ, добавление или удаление данных.
Ниже приведены несколько примеров контейнеров, использующих классы STL.
Вот контейнеры последовательности, что означает, что данные надежно упорядочены (то есть у них есть передняя и задняя часть. Я НЕ имею в виду, что они автоматически сортируются!).
Это ассоциативные контейнеры, означающие, что элементы больше не упорядочены, а вместо этого имеют ассоциации друг с другом, используемые для определения уникальности или сопоставления:
Контейнерные адаптеры, с другой стороны, представляют собой интерфейсы, созданные путем ограничения функциональности уже существующего контейнера и предоставления другого набора функций. Когда вы объявляете адаптеры контейнеров, у вас есть возможность указать, какие контейнеры последовательности образуют базовый контейнер. Эти:
См. эту справочную страницу для получения дополнительной информации, включая временную сложность для каждой из операций и ссылки на подробные страниц для каждого из типов контейнеров.
Техническое определение контейнера из документации SGI STL довольно хорошее:
Контейнер — это объект, который хранит другие объекты (его элементы) и имеет методы для доступа к своим элементам. В частности, каждый тип, являющийся моделью контейнера, имеет связанный с ним тип итератора, который можно использовать для итерации элементов контейнера.
Итак, контейнер — это структура данных, которая содержит («содержит») набор объектов некоторого типа. Основная идея заключается в том, что существуют разные типы контейнеров, каждый из которых хранит объекты по-разному и обеспечивает разные характеристики производительности, но все они имеют стандартный интерфейс, так что вы можете легко заменить один на другой без особых изменений. кода, который использует контейнер. Идея состоит в том, что контейнеры максимально взаимозаменяемы.
Адаптеры контейнеров — это классы, которые предоставляют подмножество функций контейнера, но могут предоставлять дополнительные функции, упрощающие использование контейнеров в определенных сценариях. Например, вы можете легко использовать std::vector
или std::deque
для структуры данных стека и вызывать push_back
, back
и pop_back
в качестве интерфейса стека; std::stack
предоставляет интерфейс, который может использовать std::vector
или std::deque
или другой контейнер последовательности, но предоставляет более стандартные функции-члены push
, top
и pop
для доступа к членам.