Classe queue
Uma classe do adaptador de contêiner de modelo que fornece uma restrição de funcionalidade para algum tipo de contêiner subjacente, limitando o acesso aos elementos inicial e final. Elementos podem ser adicionados na parte final e removidos da parte inicial, bem como podem ser inspecionados em ambas as extremidades da queue
.
Sintaxe
template <class Type, class Container = deque <Type>>
class queue
Parâmetros
Type
O tipo de dados do elemento a ser armazenado no queue
.
Container
O tipo do contêiner subjacente usado para implementar o queue
.
Comentários
Os elementos da classe Type
estipulados no primeiro parâmetro de modelo de um objeto de queue
são sinônimo de value_type
e devem corresponder ao tipo de elemento na classe de contêiner subjacente Container
estipulada pelo segundo parâmetro de modelo. O Type
deve ser atribuível, para que seja possível copiar objetos desse tipo e atribuir valores a variáveis desse tipo.
Classes de contêiner subjacente adequadas para queue
incluem deque
e list
ou qualquer outro contêiner de sequência com suporte às operações de front
, back
, push_back
e pop_front
. A classe de contêiner subjacente é encapsulada dentro do adaptador do contêiner, que expõe apenas o conjunto limitado de funções membro de contêiner de sequência como uma interface pública.
A igualdade dos objetos de queue
será comparável somente se a igualdade dos elementos da classe Type
for comparável e são comparáveis em menor-que somente se os elementos da classe Type
forem comparáveis em menor-que.
Há três tipos de adaptadores de contêiner definidos pela Biblioteca Padrão C++: stack
, queue
e priority_queue
. Cada um deles restringe a funcionalidade de uma classe de contêiner subjacente para fornecer uma interface com precisão controlada a uma estrutura de dados padrão.
A classe
stack
dá suporte a uma estrutura de dados UEPS (último a entrar, primeiro a sair). Uma boa analogia é pensar em uma pilha de pratos. Os elementos (os pratos) podem inseridos, inspecionados ou removidos somente da parte superior da pilha, que é o último elemento no final do contêiner base. A restrição para acessar apenas o elemento superior é o motivo para usar a classestack
.A classe
queue
dá suporte a uma estrutura de dados PEPS (primeiro a entrar, primeiro a sair). Uma boa analogia é pensar em pessoas em uma fila para o caixa do banco. Os elementos (as pessoas) vão sendo adicionados na parte final da fila e são removidos do início dela. Tanto o início quanto o final da fila podem ser inspecionados. A restrição de acessar apenas os elementosfront
eback
final dessa maneira é o motivo para usar a classequeue
.A classe
priority_queue
ordena seus elementos para que o elemento maior sempre esteja na posição superior. Ele dá suporte à inserção de um elemento e a inspeção e remoção do elemento superior. Uma boa analogia é pensar em pessoas em fila organizadas por idade, altura ou algum outro critério.
Membros
Construtores
Nome | Descrição |
---|---|
queue |
Constrói um queue que é vazio ou que é uma cópia de um objeto de contêiner base. |
Typedefs
Nome | Descrição |
---|---|
container_type |
Um tipo que fornece o contêiner base para ser adaptado pelo queue . |
size_type |
Um tipo de inteiro sem sinal que pode representar o número de elementos em um queue . |
value_type |
Um tipo que representa o tipo de objeto armazenado como um elemento em um queue . |
Funções
Nome | Descrição |
---|---|
back |
Retorna uma referência para o último e recém-adicionado elemento na parte final de queue . |
empty |
Testa se queue está vazio. |
front |
Retorna uma referência ao primeiro elemento na parte inicial de queue . |
pop |
Remove um elemento no início do queue . |
push |
Adiciona um elemento na parte traseira do queue . |
size |
Retorna o número de elementos no queue . |
back
Retorna uma referência para o último e recém-adicionado elemento na parte final de queue
.
reference back();
const_reference back() const;
Valor de retorno
O último elemento de queue
. Se a queue
estiver vazia, o valor retornado será indefinido.
Comentários
Se o valor retornado de back
for atribuído a const_reference
, o objeto queue
não poderá ser modificado. Se o valor retornado de back
for atribuído a um reference
, o objeto queue
poderá ser modificado.
Quando compilado usando _ITERATOR_DEBUG_LEVEL
definido como 1 ou 2, um erro de runtime ocorrerá se você tentar acessar um elemento em uma queue
vazia. Consulte Iteradores Verificados para obter mais informações.
Exemplo
// queue_back.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
queue <int> q1;
q1.push( 10 );
q1.push( 11 );
int& i = q1.back( );
const int& ii = q1.front( );
cout << "The integer at the back of queue q1 is " << i
<< "." << endl;
cout << "The integer at the front of queue q1 is " << ii
<< "." << endl;
}
container_type
Um tipo que fornece o contêiner base a ser adaptado.
typedef Container container_type;
Comentários
O tipo é um sinônimo do parâmetro de modeloContainer
. A classe de contêiner da sequência da Biblioteca Padrão C++ list
e a classe deque
padrão atendem aos requisitos para serem usadas como o contêiner base para um objeto queue
. Tipos definidos pelo usuário que satisfazem os requisitos também podem ser usados.
Para mais informações sobre Container
, confira a seção Comentários do tópico queue Class
.
Exemplo
Veja o exemplo de queue
que demonstra como declarar e usar container_type
.
empty
Testa se queue
está vazio.
bool empty() const;
Valor de retorno
true
se queue
for vazio; false
se queue
não for vazio.
Exemplo
// queue_empty.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
// Declares queues with default deque base container
queue <int> q1, q2;
q1.push( 1 );
if ( q1.empty( ) )
cout << "The queue q1 is empty." << endl;
else
cout << "The queue q1 is not empty." << endl;
if ( q2.empty( ) )
cout << "The queue q2 is empty." << endl;
else
cout << "The queue q2 is not empty." << endl;
}
The queue q1 is not empty.
The queue q2 is empty.
front
Retorna uma referência ao primeiro elemento na parte inicial de queue
.
reference front();
const_reference front() const;
Valor de retorno
O primeiro elemento de queue
. Se a queue
estiver vazia, o valor retornado será indefinido.
Comentários
Se o valor retornado de front
for atribuído a const_reference
, o objeto queue
não poderá ser modificado. Se o valor retornado de front
for atribuído a um reference
, o objeto queue
poderá ser modificado.
A função membro retorna uma reference
para o primeiro elemento da sequência controlada, que não pode ser vazio.
Quando compilado usando _ITERATOR_DEBUG_LEVEL
definido como 1 ou 2, um erro de runtime ocorrerá se você tentar acessar um elemento em uma queue
vazia. Consulte Iteradores Verificados para obter mais informações.
Exemplo
// queue_front.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main() {
using namespace std;
queue <int> q1;
q1.push( 10 );
q1.push( 20 );
q1.push( 30 );
queue <int>::size_type i;
i = q1.size( );
cout << "The queue length is " << i << "." << endl;
int& ii = q1.back( );
int& iii = q1.front( );
cout << "The integer at the back of queue q1 is " << ii
<< "." << endl;
cout << "The integer at the front of queue q1 is " << iii
<< "." << endl;
}
pop
Remove um elemento no início do queue
.
void pop();
Comentários
queue
não pode ser vazio para aplicar a função membro. O início da queue
é a posição ocupada pelo elemento adicionado mais recentemente e é o último elemento no fim do contêiner.
Exemplo
// queue_pop.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
queue <int> q1, s2;
q1.push( 10 );
q1.push( 20 );
q1.push( 30 );
queue <int>::size_type i;
i = q1.size( );
cout << "The queue length is " << i << "." << endl;
i = q1.front( );
cout << "The element at the front of the queue is "
<< i << "." << endl;
q1.pop( );
i = q1.size( );
cout << "After a pop the queue length is "
<< i << "." << endl;
i = q1. front ( );
cout << "After a pop, the element at the front of the queue is "
<< i << "." << endl;
}
The queue length is 3.
The element at the front of the queue is 10.
After a pop the queue length is 2.
After a pop, the element at the front of the queue is 20.
push
Adiciona um elemento na parte traseira do queue
.
void push(const Type& val);
Parâmetros
val
O elemento adicionado na parte final da queue
.
Comentários
O fim da queue
é a posição ocupada pelo elemento adicionado mais recentemente e é o último elemento no fim do contêiner.
Exemplo
// queue_push.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
queue <int> q1;
q1.push( 10 );
q1.push( 20 );
q1.push( 30 );
queue <int>::size_type i;
i = q1.size( );
cout << "The queue length is " << i << "." << endl;
i = q1.front( );
cout << "The element at the front of the queue is "
<< i << "." << endl;
}
The queue length is 3.
The element at the front of the queue is 10.
queue
Constrói um queue
que é vazio ou que é uma cópia de um objeto de contêiner base.
queue();
explicit queue(const container_type& right);
Parâmetros
right
O contêiner const
do qual o queue
construído será uma cópia.
Comentários
O contêiner de base padrão da fila para queue
é deque
. Você também pode especificar list
como um contêiner base, mas não pode especificar vector
, pois ele não tem a função de membro pop_front
necessária.
Exemplo
// queue_queue.cpp
// compile with: /EHsc
#include <queue>
#include <vector>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
// Declares queue with default deque base container
queue <char> q1;
// Explicitly declares a queue with deque base container
queue <char, deque<char> > q2;
// These lines don't cause an error, even though they
// declares a queue with a vector base container
queue <int, vector<int> > q3;
q3.push( 10 );
// but the following would cause an error because vector has
// no pop_front member function
// q3.pop( );
// Declares a queue with list base container
queue <int, list<int> > q4;
// The second member function copies elements from a container
list<int> li1;
li1.push_back( 1 );
li1.push_back( 2 );
queue <int, list<int> > q5( li1 );
cout << "The element at the front of queue q5 is "
<< q5.front( ) << "." << endl;
cout << "The element at the back of queue q5 is "
<< q5.back( ) << "." << endl;
}
The element at the front of queue q5 is 1.
The element at the back of queue q5 is 2.
size
Retorna o número de elementos no queue
.
size_type size() const;
Valor de retorno
O comprimento atual do queue
.
Exemplo
// queue_size.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
queue <int> q1, q2;
queue <int>::size_type i;
q1.push( 1 );
i = q1.size( );
cout << "The queue length is " << i << "." << endl;
q1.push( 2 );
i = q1.size( );
cout << "The queue length is now " << i << "." << endl;
}
The queue length is 1.
The queue length is now 2.
size_type
Um tipo de inteiro sem sinal que pode representar o número de elementos em um queue
.
typedef typename Container::size_type size_type;
Comentários
O tipo é um sinônimo do size_type
do contêiner base adaptado pelo queue
.
Exemplo
Veja o exemplo de queue::front
que demonstra como declarar e usar size_type
.
value_type
Um tipo que representa o tipo de objeto armazenado como um elemento em um queue
.
typedef typename Container::value_type value_type;
Comentários
O tipo é um sinônimo do value_type
do contêiner base adaptado pelo queue
.
Exemplo
// queue_value_type.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
// Declares queues with default deque base container
queue<int>::value_type AnInt;
AnInt = 69;
cout << "The value_type is AnInt = " << AnInt << endl;
queue<int> q1;
q1.push(AnInt);
cout << "The element at the front of the queue is "
<< q1.front( ) << "." << endl;
}
The value_type is AnInt = 69
The element at the front of the queue is 69.
Confira também
Acesso Thread-Safe na Biblioteca Padrão C++
Referência da biblioteca padrão C++