Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Универсальный контейнер: одновременно вектор, стек и очередь

#cpp


Подскажите как правильно реализовать на С++ контейнер, который одновременно может
работать как вектор (список), LIFO-стек и FIFO-очередь, максимально используя фичи
STL "из коробки" ?

Применение: хочу универсальный тип-контейнер, который может не только хранить вложенные
структуры (пока справляется class Obj { string val; vector nested; }), но и уметь
специфичные для каждого перечисленного контейнера фичи одновременно:


vector: произвольное чтение/вставка/замена по индексу
stack: push/pop
queue: put/get

    


Ответы

Ответ 1



deque - он же double-ended queue Поддерживает все, что вы перечислили. Названия функций-членов немного не такие, но это, думаю, не принципиально :) push_back, push_front - вставка с любого конца, pop_back, pop_front - снятие. Словом, смотрите более детальное описание.

Ответ 2



В стандарте C++ такие абстрактные типы данных, как стек, очередь и приоритетная очередь, определены как адаптеры других контейнеров. По умолчанию таким базовым контейнером является стандартный контейнер std::deque. Вы можете также использовать стандартный контейнер std::list, который реализует все необходимые операции для стека и очереди, но у него отсутствует прямой доступ к элементам.

Комментариев нет:

Отправить комментарий