queue
-Klasse
Eine Vorlagencontainer-Adapterklasse, die die Funktionalität für einige zugrunde liegende Containertypen einschränkt, indem sie den Zugriff auf die vorderen und hinteren Elemente beschränkt. Elemente können an der Rückseite hinzugefügt oder von vorne entfernt werden, und Elemente können an einem der beiden Enden queue
geprüft werden.
Syntax
template <class Type, class Container = deque <Type>>
class queue
Parameter
Type
Der in queue
zu speichernde Elementdatentyp.
Container
Der Typ des zugrunde liegenden Containers, der zum Implementieren des queue
.
Hinweise
Die im ersten Vorlagenparameter eines queue
Objekts festgelegten Elemente der Klasse Type
sind synonym mit value_type
und müssen mit dem Typ des Elements in der zugrunde liegenden Containerklasse Container
übereinstimmen, die vom zweiten Vorlagenparameter festgelegt wird. Die Type
Zuordnung muss zulässig sein, damit Objekte dieses Typs kopiert und Variablen dieses Typs Werte zugewiesen werden können.
Geeignete zugrunde liegende Containerklassen für queue
Include deque
- und , oder list
andere Sequenzcontainer, die die Vorgänge von front
, , back
, push_back
und pop_front
. Die zugrunde liegende Containerklasse wird im Containeradapter gekapselt, der nur den begrenzten Satz der Memberfunktionen des Sequenzcontainers als öffentliche Schnittstelle verfügbar macht.
Die queue
Objekte sind gleichgleich, wenn und nur dann, wenn die Elemente der Klasse Type
gleichwertig sind und kleiner als vergleichbar sind, wenn und nur, wenn die Elemente der Klasse Type
kleiner als vergleichbar sind.
Es gibt drei Typen von Containeradaptern, die von der C++-Standardbibliothek definiert werden: stack
, , queue
und priority_queue
. Jede schränkt die Funktionalität von einigen zugrunde liegenden Containerklassen ein, um eine präzise gesteuerte Oberfläche für eine Standarddatenstruktur anzubieten.
Die
stack
Klasse unterstützt eine Last-in-First-Out-Datenstruktur (LIFO). Ein guter Analoga, der man beachten sollte, wäre ein Stapel von Platten. Elemente (Teller) können eingefügt, überprüft oder nur vom Anfang des Stapels entnommen werden, was dem letzten Element am Ende des Basiscontainers entspricht. Die Einschränkung, nur auf das oberste Element zuzugreifen, ist der Grund für die Verwendung derstack
Klasse.Die
queue
Klasse unterstützt eine FiFO-Datenstruktur (First In, First-Out). Eine gute Analogie, die man beachten sollte, wäre, dass die Leute für einen Bankzähler aufstehen. Elemente (Personen) können am Ende der Schlange hinzugefügt werden und vom Anfang der Schlange entfernt werden. Sowohl der Anfang als auch das Ende einer Schlange können überprüft werden. Die Einschränkung, nur auf diese Weise auf diefront
Elementeback
zuzugreifen, ist der Grund für die Verwendung derqueue
Klasse.Die
priority_queue
Klasse sortiert ihre Elemente so, dass das größte Element immer an der obersten Position liegt. Die Klasse unterstützt Einfügen eines Elements sowie die Prüfung und Entfernung des obersten Elements. Ein gutes Analoga, das man beachten sollte, wäre, dass Die Leute, die sich nach Alter, Höhe oder einem anderen Kriterium anordnen.
Member
Konstruktoren
Name | Beschreibung |
---|---|
queue |
Erstellt ein queue -Objekt, das leer oder eine Kopie eines Basiscontainerobjekts ist. |
TypeDefs
Name | Beschreibung |
---|---|
container_type |
Ein Typ, der den Basiscontainer bereitstellt, der durch queue angepasst werden soll. |
size_type |
Eine Ganzzahltyp ohne Vorzeichen, der die Anzahl von Elementen in queue darstellen kann. |
value_type |
Ein Typ, der den Typ des Objekts angibt, das in einem queue -Objekt als Element gespeichert wird. |
Functions
Name | Beschreibung |
---|---|
back |
Gibt ein Verweis auf das letzte und das zuletzt hinzugefügte Element auf der Rückseite des queue zurück. |
empty |
Testet, ob das queue -Objekt ist leer. |
front |
Gibt einen Verweis auf das erste Element auf der Vorderseite von queue zurück. |
pop |
Entfernt ein Element vom Anfang der queue . |
push |
Fügt am Ende der queue ein Element hinzu. |
size |
Gibt die Anzahl von Elementen in der queue zurück. |
back
Gibt ein Verweis auf das letzte und das zuletzt hinzugefügte Element auf der Rückseite des queue
zurück.
reference back();
const_reference back() const;
Rückgabewert
Das letzte Element der queue
. Wenn dies queue
leer ist, ist der Rückgabewert nicht definiert.
Hinweise
Wenn der Rückgabewert back
eines const_reference
Objekts zugewiesen ist, kann das queue
Objekt nicht geändert werden. Wenn der Rückgabewert back
eines reference
Objekts zugewiesen ist, kann das queue
Objekt geändert werden.
Bei der Kompilierung mithilfe _ITERATOR_DEBUG_LEVEL
von 1 oder 2 tritt ein Laufzeitfehler auf, wenn Sie versuchen, auf ein Element in einem leeren queue
Element zuzugreifen. Weitere Informationen finden Sie unter Checked Iterators .
Beispiel
// 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
Ein Typ, der den anzupassenden Basiscontainer bereitstellt.
typedef Container container_type;
Hinweise
Der Type stellt ein Synonym für den Vorlagenparameter Container
dar. Zwei Containerklassen der C++-Standardbibliothekssequenz – die list
Klasse und die Standardklasse deque
– erfüllen die Anforderungen, die als Basiscontainer für ein queue
Objekt verwendet werden sollen. Benutzerdefinierte Typen, die diese Anforderung erfüllen, können auch verwendet werden.
Weitere Informationen Container
finden Sie im Abschnitt "Hinweise" des queue Class
Themas.
Beispiel
Ein Beispiel für queue
das Deklarieren und Verwenden container_type
finden Sie im Beispiel.
empty
Testet, ob ein queue
-Element leer ist.
bool empty() const;
Rückgabewert
true
wenn die queue
leer ist; false
wenn dies queue
nicht zu ernennen ist.
Beispiel
// 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
Gibt einen Verweis auf das erste Element auf der Vorderseite von queue
zurück.
reference front();
const_reference front() const;
Rückgabewert
Das erste Element der queue
. Wenn dies queue
leer ist, ist der Rückgabewert nicht definiert.
Hinweise
Wenn der Rückgabewert front
eines const_reference
Objekts zugewiesen ist, kann das queue
Objekt nicht geändert werden. Wenn der Rückgabewert front
eines reference
Objekts zugewiesen ist, kann das queue
Objekt geändert werden.
Die Memberfunktion gibt ein reference
an das erste Element der kontrollierten Sequenz zurück, das nicht in Denkhaftheit sein muss.
Bei der Kompilierung mithilfe _ITERATOR_DEBUG_LEVEL
von 1 oder 2 tritt ein Laufzeitfehler auf, wenn Sie versuchen, auf ein Element in einem leeren queue
Element zuzugreifen. Weitere Informationen finden Sie unter Checked Iterators .
Beispiel
// 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
Entfernt ein Element vom Anfang der queue
.
void pop();
Hinweise
Der queue
Wert muss nicht sein, um die Memberfunktion anzuwenden. Oben befindet queue
sich die Position, die vom zuletzt hinzugefügten Element belegt wird und das letzte Element am Ende des Containers ist.
Beispiel
// 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
Fügt am Ende der queue
ein Element hinzu.
void push(const Type& val);
Parameter
val
Das Element, das der Rückseite des queue
Elements hinzugefügt wurde.
Hinweise
Die Rückseite der Ist queue
die Position, die vom zuletzt hinzugefügten Element belegt wird und das letzte Element am Ende des Containers ist.
Beispiel
// 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
Erstellt ein queue
-Objekt, das leer oder eine Kopie eines Basiscontainerobjekts ist.
queue();
explicit queue(const container_type& right);
Parameter
right
Der const
Container, dessen Konstruktion queue
eine Kopie sein soll.
Hinweise
Der Standardbasiscontainer für queue
dieses Objekt ist deque
. Sie können auch als Basiscontainer angeben list
, aber nicht angeben vector
, da die erforderliche pop_front
Memberfunktion fehlt.
Beispiel
// 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
Gibt die Anzahl von Elementen in der queue
zurück.
size_type size() const;
Rückgabewert
Die aktuelle Länge des queue
.
Beispiel
// 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
Eine Ganzzahltyp ohne Vorzeichen, der die Anzahl von Elementen in queue
darstellen kann.
typedef typename Container::size_type size_type;
Hinweise
Der Typ ist ein Synonym für den size_type
von der queue
.
Beispiel
Ein Beispiel für queue::front
das Deklarieren und Verwenden size_type
finden Sie im Beispiel.
value_type
Ein Typ, der den Typ des Objekts angibt, das in einem queue
-Objekt als Element gespeichert wird.
typedef typename Container::value_type value_type;
Hinweise
Der Typ ist ein Synonym für den value_type
von der queue
.
Beispiel
// 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.
Siehe auch
Threadsicherheit in der C++-Standardbibliothek
C++-Standardbibliotheksreferenz