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
, back
push_back
, e pop_front
.list
deque
queue
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
, queue
e 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 dellastack
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 aglifront
elementi eback
in questo modo è il motivo dell'uso dellaqueue
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_reference
oggetto , l'oggetto queue
non può essere modificato. Se il valore restituito di back
viene assegnato a un reference
oggetto , 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_reference
oggetto , l'oggetto queue
non può essere modificato. Se il valore restituito di front
viene assegnato a un reference
oggetto , 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++