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.