Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Classe
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++