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 queuegeprü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 listandere Sequenzcontainer, die die Vorgänge von front, , back, push_backund 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, , queueund 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 der stack 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 die front Elemente back zuzugreifen, ist der Grund für die Verwendung der queue 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_referenceObjekts zugewiesen ist, kann das queue Objekt nicht geändert werden. Wenn der Rückgabewert back eines referenceObjekts 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 queueElement 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 Containerdar. 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 Containerfinden Sie im Abschnitt "Hinweise" des queue Class Themas.

Beispiel

Ein Beispiel für queue das Deklarieren und Verwenden container_typefinden 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_referenceObjekts zugewiesen ist, kann das queue Objekt nicht geändert werden. Wenn der Rückgabewert front eines referenceObjekts 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 queueElement 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 queueElements 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_typefinden 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