Оскільки єдиними операціями, необхідними для використання контейнера в стеку, є:
- назад ()
- відсунути()
- pop_back ()
Чому контейнер за замовчуванням для нього є декаком замість вектора?
Чи не перерозподіли за допомогою deque дають буфер елементів перед front (), щоб push_front () був ефективною операцією? Хіба ці елементи не витрачаються даремно, оскільки вони ніколи не будуть використовуватися в контексті стека?
Якщо немає накладних витрат на використання deque таким чином замість вектора, чому за замовчуванням для prior_queue вектор також не deque? (prior_queue вимагає front (), push_back () та pop_back () - по суті такий самий, як для стека)
Оновлено на основі відповідей нижче:
Здається, що спосіб реалізації deque - це масив змінних розмірів із масивами фіксованого розміру. Це робить зростання швидшим, ніж вектор (що вимагає перерозподілу та копіювання), тому для чогось на зразок стека, який полягає у додаванні та видаленні елементів, deque, швидше за все, є кращим вибором.
priority_queue вимагає значної індексації, оскільки кожне видалення та вставка вимагає запуску pop_heap () або push_heap (). Це, мабуть, робить вектор кращим вибором там, оскільки додавання елемента все одно амортизується постійно.