#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, который реализует все необходимые операции для стека и очереди, но у него отсутствует прямой доступ к элементам.
Комментариев нет:
Отправить комментарий