Контейнеры

Типы контейнеров

Последнее обновление: 26.03.2023

Для управления наборами объектов в стандартной библиотеке C++ определены контейнеры. Контейнер представляет коллекцию объектов определенного типа и позволяет и управлять доступом к этим элементам. В С++ есть два типа контейнеров: ассоциативные и последовательные.

Последовательный контейнер (sequential container) хранит элементы последовательно, элементы располагаются друг рядом с другом. Однако меняется их порядок в зависимости от конкретного контейнера. .

Типы последовательных контейнеров:

  • array: коллекция фиксированного размера.

    Поддерживает произвольный доступ к любому элементу в контейнере.

    Добавлять или удалять элементы из контейнера нельзя.

  • vector: коллекция переменного размера.

    Поддерживает произвольный доступ к любому элементу в контейнере.

    Обеспечивает добавление и удаление элементов из любого места контейнера.

  • deque: двусторонняя очередь.

    Поддерживает произвольный доступ к любому элементу в контейнере.

    Обеспечивает удаление и добавление элементов в начале и в конце контейнера.

  • list: двухсвязный список

    Поддерживает только последовательный двухнаправленный доступ к элементам.

    Обеспечивает удаление и добавление элементов в начале и в конце контейнера.

  • forward_list: односвязный список.

    Поддерживает только однонаправленный последовательный доступ к элементам.

    Обеспечивает удаление и добавление элементов в начале и в конце контейнера.

Таким образом, стандартная библиотека C++ по умолчанию содержит ряд контейнеров, которые представляют определенные структуры данных. Все они имеют как некоторые общие, так и специфические возможности. За исключением класса array все они поддерживают добавление и удаление элементов. Основное различие между ними состоит в том, как они обеспечивают добавление и удаление элементов, а также доступ к элементам в контейнере. И в зависимости от ситуации и потребностей можно использовать тот или иной тип контейнеров. Например, если надо иметь возможность произвольный элемент контейнера, то применяется array или vector (с list или forwarded_list может потребоваться пробегаться по списку, чтобы найти нужный элемент). Если же надо иметь возможность добавлять или удалить элементы в середине контейнера, то можно применять list или forwarded_list, что с вектором сложнее сделать. Однако наиболее часто используется вектор, как более гибкий тип данных. Другие типы контейнеров применяются гораздо реже.

Адаптеры контейнеров

Кроме последовательных контейнеров есть так называемые адаптеры контейнеров (container adaptor). Технически они не являются контейнерами, а инкапсулируют один из вышеописанных контейнеров (например, вектор) и позвляют работать с этими контейнерами определенным образом. Это следующие типы

  • std::stack<>: представляет структуру данных "стек"

  • std::queue<>: представляет структуру данных "очередь"

  • std::priority_queue<>: также представляет очередь, но при этому ее элементы имеют приоритеты

Ассоциативные контейнеры

Ассоциативные контейнеры (associative containers) представляют такие контейнеры, где с каждым элементом ассоциирован некоторый ключ, и этот ключ применяется для доступа к элементу в контейнере.

В С++ ассоциативные контейнеры представлены множествами (set) и картами/словарями (map).

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850