
std::dequeDeque (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.
std::dequeSuponhamos 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:
#include <iostream>
#include <deque>
class Content {
public:
int xyz;
std::string something;
double price;
Content(int x, const std::string &s, double p)
: xyz(x), something(s), price(p) {
}
};
int main( int argc , char **argv ){
Content c1(42, "Terminal Root", 9.36);
Content c2(24, "Marcos Oliveira", 8.04);
std::deque<Content> con;
con.push_back(c1);
con.push_front(c2);
for( auto i : con){
std::cout << i.xyz << ' ';
std::cout << i.something << ' ';
std::cout << i.price << '\n';
}
return 0;
}Saída:
24 Marcos Oliveira 8.04
42 Terminal Root 9.36
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.
#include <iostream>
#include <vector>
class Content {
public:
int xyz;
std::string something;
double price;
Content(int x, const std::string &s, double p)
: xyz(x), something(s), price(p) {
}
};
int main( int argc , char **argv ){
Content c1(42, "Terminal Root", 9.36);
Content c2(24, "Marcos Oliveira", 8.04);
std::vector<Content> con;
con.push_back(c2); // Invertemos a ordem, primeiro adicionamos o segundo para podermos obter o mesmo resultado
con.push_back(c1);
for( auto i : con){
std::cout << i.xyz << ' ';
std::cout << i.something << ' ';
std::cout << i.price << '\n';
}
return 0;
}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.std::deque quando deseja adicionar ou excluir de ambas as extremidades.std::vetor se a inserção ou exclusões forem necessárias principalmente no final.deque tem suas maiores vantagens:deque tem suas maiores desvantagens:std::vector, dependendo do tipo de solicitação de dados que seu programa venha fazer com mais frequência.Quer aprender C++? Então, acesse: https://terminalroot.com.br/cpp .