Uma vez que as únicas operações necessárias para que um contêiner seja usado em uma pilha são:
- costas()
- retrocesso()
- pop_back ()
Por que o contêiner padrão para ele é um deque em vez de um vetor?
As realocações deque não fornecem um buffer de elementos antes de front () para que push_front () seja uma operação eficiente? Esses elementos não são desperdiçados, já que nunca serão usados no contexto de uma pilha?
Se não houver 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 pilha)
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), então, para algo como uma pilha que envolve adicionar e remover elementos, o deque é provavelmente uma escolha melhor.
priority_queue requer muita indexação, já que toda remoção e inserção requer que você execute pop_heap () ou push_heap (). Isso provavelmente torna o vetor uma escolha melhor, já que adicionar um elemento ainda é uma constante amortizada de qualquer maneira.