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.
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
:
#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 .