Поскольку для использования контейнера в стеке требуются только следующие операции:
- назад ()
- отталкивать()
- pop_back ()
Почему контейнер по умолчанию для него - двухсторонняя очередь, а не вектор?
Разве перераспределение deque не дает буфер элементов перед front (), чтобы push_front () была эффективной операцией? Разве эти элементы не потрачены впустую, поскольку они никогда не будут использоваться в контексте стека?
Если нет накладных расходов на использование двухсторонней очереди таким образом вместо вектора, почему по умолчанию для priority_queue вектор, а не двухсторонняя очередь? (priority_queue требует front (), push_back () и pop_back () - по сути, то же, что и для стека)
Обновлено на основе ответов ниже:
Похоже, что способ, которым deque обычно реализуется, представляет собой массив переменного размера массивов фиксированного размера. Это делает рост быстрее, чем вектор (что требует перераспределения и копирования), поэтому для чего-то вроде стека, который предназначен для добавления и удаления элементов, deque, вероятно, будет лучшим выбором.
priority_queue сильно требует индексации, так как каждое удаление и вставка требует, чтобы вы запускали pop_heap () или push_heap (). Это, вероятно, делает вектор лучшим выбором, поскольку добавление элемента все равно амортизируется константой.