Muitas vezes um pequeno detalhe faz muita diferença.
Deque std::deque
Deque (geralmente pronunciado como “deck”) é um acrônimo irregular: Double ended queue, em português significa: Fila dupla, e é justamente isso que ele faz.
As filas de extremidade dupla são contêineres de sequência com tamanhos dinâmicos que podem ser expandidos ou contraídos em ambas as extremidades (na frente ou no verso), diferentemente do Vector que possui fila única, no std::deque você pode inserir dados tanto no final, com push_back() igual nos vetores, quanto no início: front_back() função-membro inexistente em vetores.
Exemplo de uso do std::deque
Suponhamos que você possua uma classe que armazena diferentes tipos de dados e você deseja incluir os elementos na ordem que lhe seja apresentadas, e o primeiro à entrar deve ser o primeiro à sair, com deque você pode usar o push_back e em seguida o push_front:
Saída:
Se substituíssemos o deque pelo vector precisaríamos inverter a ordem para que o resultado pudesse ser o esperado, pois só teríamos o push_back:
Mesmo código, mas utilizando std::vector.
Diferenças entre Deque e Vector
Vector fornece inserção e exclusão apenas no meio e no final. Considerando que, deque fornece operações para inserção na frente, meio e fim. Ou seja, além das APIs push_back() e pop_back() assim como vector, o deque também possui a API push_front() e pop_front() para adicionar e deletar elementos do front.
Vector fornece bom desempenho para inserção e exclusão apenas no final e desempenho ruim para inserção e exclusão no meio.
Deque fornece o mesmo tipo de desempenho como no Vector para inserção e exclusão no final e no meio. Além disso, o deque oferece bom desempenho para inserção e exclusão na frente também.
O armazenamento de um Deque é automaticamente expandido e contraído conforme necessário. A expansão de um Deque é mais barata do que a expansão de um Vector porque não envolve a cópia dos elementos existentes para um novo local de memória.
Qual você deve escolher ?
Deve-se escolher std::deque quando deseja adicionar ou excluir de ambas as extremidades.
Deve-se escolher o std::vetor se a inserção ou exclusões forem necessárias principalmente no final.
Onde deque tem suas maiores vantagens:
Ao aumentar ou diminuir a coleção de qualquer extremidade
Quando você está lidando com tamanhos de coleção muito grandes.
Onde deque tem suas maiores desvantagens:
Algumas operações podem custar mais caro que o std::vector, dependendo do tipo de solicitação de dados que seu programa venha fazer com mais frequência.
Exportar os dados para a Linguagem C usando extern possui incompatibilidade.
Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!