Por que o std :: stack usa o std :: deque por padrão?

Como as únicas operações necessárias para um contêiner a ser usado em uma pilha são:

de volta()push_back ()pop_back ()

Por que o contêiner padrão é um deque em vez de um vetor?

Não deque realocações dar um buffer de elementos antes de frente () para que push_front () é uma operação eficiente? Esses elementos não são desperdiçados, uma vez que nunca serão usados ​​no contexto de uma pilha?

Se não houver nenhuma sobrecarga para usar um deque dessa maneira em vez de um vetor, por que o padrão para priority_queue é um vetor e não um deque também? (priority_queue requer front (), push_back () e pop_back () - essencialmente o mesmo que para stack)

Atualizado com base nas respostas abaixo:

Parece que a maneira como o deque é geralmente implementado é uma matriz de tamanho variável de matrizes de tamanho fixo. Isso torna o crescimento mais rápido do que um vetor (o que requer realocação e cópia), portanto, para algo como uma pilha, que é toda sobre adição e remoção de elementos, o deque é provavelmente uma escolha melhor.

priority_queue requer uma indexação pesada, já que toda remoção e inserção requer que você execute pop_heap () ou push_heap (). Isso provavelmente torna o vetor uma melhor escolha, já que adicionar um elemento ainda é amortizado de qualquer maneira.

questionAnswers(2)

yourAnswerToTheQuestion