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