Compartilhar via


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 classe stack.

  • 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 elementos front e back final dessa maneira é o motivo para usar a classe queue.

  • 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++