Condividi tramite


Classe queue

Classe di adattatori di contenitori di modelli che fornisce una restrizione di funzionalità per un tipo di contenitore sottostante, limitando l'accesso all'elemento anteriore e all'elemento posteriore. Gli elementi possono essere aggiunti alla parte posteriore o rimossi dalla parte anteriore e gli elementi possono essere controllati a una delle estremità dell'oggetto queue.

Sintassi

template <class Type, class Container = deque <Type>>
class queue

Parametri

Type
Tipo di dati degli elementi da archiviare in queue.

Container
Tipo del contenitore sottostante utilizzato per implementare .queue

Osservazioni:

Gli elementi della classe Type stipulati nel primo parametro modello di un queue oggetto sono sinonimi value_type e devono corrispondere al tipo di elemento nella classe Container contenitore sottostante stipulato dal secondo parametro di modello. Deve Type essere assegnabile, in modo che sia possibile copiare oggetti di tale tipo e assegnare valori alle variabili di tale tipo.

Classi di contenitori sottostanti adatte per includere e o qualsiasi altro contenitore di sequenza che supporta le operazioni di front, backpush_back, e pop_front.listdequequeue La classe del contenitore sottostante è incapsulata nell'adattatore di contenitori, che espone solo il set limitato di funzioni membro dei contenitori di sequenza come interfaccia pubblica.

Gli queue oggetti sono paragonabili all'uguaglianza se e solo se gli elementi della classe Type sono paragonabili e sono minori di quelli confrontabili se e solo se gli elementi della classe Type sono meno di paragonabili.

Esistono tre tipi di adattatori di contenitori definiti dalla libreria standard C++: stack, queuee priority_queue. Ognuno di essi limita la funzionalità di una classe contenitore sottostante per fornire un'interfaccia controllata con precisione a una struttura di dati standard.

  • La stack classe supporta una struttura di dati LIFO (Last-In, First-Out). Un buon analogico da tenere presente sarebbe una pila di lastre. Gli elementi (piatti) possono essere inseriti, ispezionati o rimossi solo dalla cima della pila/stack, ovvero l'ultimo elemento alla fine del contenitore di base. La restrizione per accedere solo all'elemento principale è il motivo dell'uso della stack classe .

  • La queue classe supporta una struttura di dati FIFO (First-In First-In, First-Out). Una buona analogia da tenere a mente sarebbe la gente che si allinea per una banca di dire. Gli elementi (persone) possono essere aggiunti alla fine della fila e vengono rimossi dalla parte iniziale della fila. È possibile ispezionare sia l'inizio che la fine della fila. La restrizione per accedere solo agli front elementi e back in questo modo è il motivo dell'uso della queue classe .

  • La priority_queue classe ordina i relativi elementi in modo che l'elemento più grande sia sempre nella posizione superiore. Supporta l'inserimento di un elemento e l'ispezione e la rimozione del primo elemento. Una buona analogia da tenere presente sarebbe la gente che si allinea dove sono disposti in base all'età, all'altezza o ad altri criteri.

Membri

Costruttori

Nome Descrizione
queue Costruisce un queue vuoto o che rappresenta una copia totale o parziale di un oggetto contenitore di base.

Typedef

Nome Descrizione
container_type Tipo che fornisce il contenitore di base che deve essere adattato da queue.
size_type Tipo Unsigned Integer in grado di rappresentare il numero di elementi di un queue.
value_type Tipo che rappresenta il tipo di oggetto archiviato come elemento in queue.

Funzioni

Nome Descrizione
back Restituisce un riferimento all'ultimo elemento aggiunto di recente alla fine della queue.
empty Verifica se queue è vuoto.
front Restituisce un riferimento al primo elemento all'inizio dell'oggetto queue.
pop Rimuove un elemento dall'inizio dell'oggetto queue.
push Aggiunge un elemento alla fine dell'oggetto queue.
size Restituisce il numero di elementi nel queue.

back

Restituisce un riferimento all'ultimo elemento aggiunto di recente alla fine della queue.

reference back();

const_reference back() const;

Valore restituito

Ultimo elemento dell'oggetto queue. Se è queue vuoto, il valore restituito non è definito.

Osservazioni:

Se il valore restituito di back viene assegnato a un const_referenceoggetto , l'oggetto queue non può essere modificato. Se il valore restituito di back viene assegnato a un referenceoggetto , l'oggetto queue può essere modificato.

Quando viene compilato usando _ITERATOR_DEBUG_LEVEL definito come 1 o 2, si verificherà un errore di runtime se si tenta di accedere a un elemento in un oggetto vuoto queue. Per altre informazioni, vedere Checked Iterators .

Esempio

// 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

Tipo che fornisce il contenitore di base da adattare.

typedef Container container_type;

Osservazioni:

Il tipo è un sinonimo del parametro di modello Container. Due classi contenitore della sequenza della libreria standard C++, la list classe e la classe predefinita deque , soddisfano i requisiti da usare come contenitore di base per un queue oggetto . È anche possibile usare tipi definiti dall'utente che soddisfano i requisiti.

Per altre informazioni su Container, vedere la sezione Osservazioni dell'argomento queue Class .

Esempio

Vedere l'esempio per queue un esempio di come dichiarare e usare container_type.

empty

Verifica se un queue è vuoto.

bool empty() const;

Valore restituito

true se l'oggetto queue è vuoto; false se l'oggetto queue è non vuoto.

Esempio

// 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

Restituisce un riferimento al primo elemento all'inizio dell'oggetto queue.

reference front();

const_reference front() const;

Valore restituito

Primo elemento dell'oggetto queue. Se è queue vuoto, il valore restituito non è definito.

Osservazioni:

Se il valore restituito di front viene assegnato a un const_referenceoggetto , l'oggetto queue non può essere modificato. Se il valore restituito di front viene assegnato a un referenceoggetto , l'oggetto queue può essere modificato.

La funzione membro restituisce un reference oggetto al primo elemento della sequenza controllata, che deve essere nonempty.

Quando viene compilato usando _ITERATOR_DEBUG_LEVEL definito come 1 o 2, si verificherà un errore di runtime se si tenta di accedere a un elemento in un oggetto vuoto queue. Per altre informazioni, vedere Checked Iterators .

Esempio

// 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

Rimuove un elemento dall'inizio dell'oggetto queue.

void pop();

Osservazioni:

Deve queue essere nonempty per applicare la funzione membro. La parte superiore di queue è la posizione occupata dall'elemento aggiunto più di recente ed è l'ultimo elemento alla fine del contenitore.

Esempio

// 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

Aggiunge un elemento alla fine dell'oggetto queue.

void push(const Type& val);

Parametri

val
Elemento aggiunto alla parte posteriore dell'oggetto queue.

Osservazioni:

La parte posteriore di queue è la posizione occupata dall'elemento aggiunto più di recente ed è l'ultimo elemento alla fine del contenitore.

Esempio

// 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

Costruisce un queue vuoto o che rappresenta una copia totale o parziale di un oggetto contenitore di base.

queue();

explicit queue(const container_type& right);

Parametri

right
Contenitore const di cui l'oggetto costruito queue deve essere una copia.

Osservazioni:

Il contenitore di base predefinito per queue è deque. È anche possibile specificare list come contenitore di base, ma non è possibile specificare vector, perché non dispone della funzione membro richiesta pop_front .

Esempio

// 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

Restituisce il numero di elementi nel queue.

size_type size() const;

Valore restituito

Lunghezza corrente dell'oggetto queue.

Esempio

// 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

Tipo Unsigned Integer in grado di rappresentare il numero di elementi di un queue.

typedef typename Container::size_type size_type;

Osservazioni:

Il tipo è un sinonimo size_type del contenitore di base adattato da queue.

Esempio

Vedere l'esempio per queue::front un esempio di come dichiarare e usare size_type.

value_type

Tipo che rappresenta il tipo di oggetto archiviato come elemento in queue.

typedef typename Container::value_type value_type;

Osservazioni:

Il tipo è un sinonimo value_type del contenitore di base adattato da queue.

Esempio

// 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.

Vedi anche

Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)
Informazioni di riferimento per la libreria standard C++