#cpp
Подскажите как правильно реализовать на С++ контейнер, который одновременно может работать как вектор (список), LIFO-стек и FIFO-очередь, максимально используя фичи STL "из коробки" ? Применение: хочу универсальный тип-контейнер, который может не только хранить вложенные структуры (пока справляется class Obj { string val; vectornested; }), но и уметь специфичные для каждого перечисленного контейнера фичи одновременно: 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, который реализует все необходимые операции для стека и очереди, но у него отсутствует прямой доступ к элементам.
Комментариев нет:
Отправить комментарий