queue
Klasa
Klasa adaptera kontenera szablonu, która zapewnia ograniczenie funkcjonalności dla określonego typu kontenera bazowego, ograniczając dostęp do elementów frontu i tyłu. Elementy można dodawać z tyłu lub usuwać z przodu, a elementy można sprawdzić na jednym końcu queue
elementu .
Składnia
template <class Type, class Container = deque <Type>>
class queue
Parametry
Type
Typ danych elementu, który ma być przechowywany w obiekcie queue
.
Container
Typ kontenera bazowego używanego do implementowania elementu queue
.
Uwagi
Elementy klasy określone w pierwszym parametrze queue
szablonu obiektu są synonimami value_type
i muszą odpowiadać typowi elementu w podstawowej klasie Type
Container
kontenera określonej przez drugi parametr szablonu. Element Type
musi być przypisywany, aby można było skopiować obiekty tego typu i przypisać wartości do zmiennych tego typu.
Odpowiednie bazowe klasy kontenerów dla queue
kontenerów include deque
i list
, lub dowolny inny kontener sekwencji, który obsługuje operacje front
, back
, push_back
i pop_front
. Podstawowa klasa kontenera jest hermetyzowana w ramach adaptera kontenera, który uwidacznia tylko ograniczony zestaw funkcji składowych kontenera sekwencji jako interfejs publiczny.
Obiekty queue
są porównywalne, jeśli i tylko wtedy, gdy elementy klasy są porównywalne, i są mniej niż porównywalne, jeśli i tylko wtedy, gdy elementy klasy Type
Type
są mniej niż porównywalne.
Istnieją trzy typy adapterów kontenerów zdefiniowanych przez standardową bibliotekę języka C++: stack
, queue
i priority_queue
. Każda z nich ogranicza funkcjonalność niektórych bazowych klas kontenerów w celu zapewnienia precyzyjnie kontrolowanego interfejsu standardowej struktury danych.
Klasa
stack
obsługuje strukturę danych last-in, first-out (LIFO). Dobry analogia do myślenia byłoby stos płyt. Elementy (płyty) mogą być wstawiane, sprawdzane lub usuwane tylko z góry stosu, który jest ostatnim elementem na końcu kontenera podstawowego. Ograniczenie dostępu tylko do górnego elementu jest powodem używaniastack
klasy.Klasa
queue
obsługuje strukturę danych pierwszego wyjścia (FIFO). Dobry analogia, aby pamiętać, byłoby ludzie w kolejce do kasjera bankowego. Elementy (osoby) można dodać z tyłu wiersza i są usuwane z przodu linii. Zarówno z przodu, jak i z tyłu linii mogą być sprawdzane. Ograniczenie dostępu tylkofront
do elementów iback
w ten sposób jest powodem używaniaqueue
klasy .Klasa
priority_queue
porządkuje elementy tak, aby największy element był zawsze na najwyższym miejscu. Obsługuje on wstawianie elementu oraz inspekcję i usuwanie górnego elementu. Dobry analogia, aby pamiętać, to ludzie w kolejce, gdzie są ułożone według wieku, wzrostu lub innego kryterium.
Elementy członkowskie
Konstruktory
Nazwa/nazwisko | opis |
---|---|
queue |
Tworzy obiekt queue pusty lub jest kopią podstawowego obiektu kontenera. |
Typedefs
Nazwa/nazwisko | opis |
---|---|
container_type |
Typ, który udostępnia kontener podstawowy do dostosowania przez element queue . |
size_type |
Niepodpisany typ liczb całkowitych, który może reprezentować liczbę elementów w obiekcie queue . |
value_type |
Typ reprezentujący typ obiektu przechowywanego jako element w obiekcie queue . |
Funkcje
Nazwa/nazwisko | opis |
---|---|
back |
Zwraca odwołanie do ostatniego i ostatnio dodanego elementu z tyłu elementu queue . |
empty |
Sprawdza, czy element queue jest pusty. |
front |
Zwraca odwołanie do pierwszego elementu z przodu elementu queue . |
pop |
Usuwa element z przodu obiektu queue . |
push |
Dodaje element z tyłu elementu queue . |
size |
Zwraca liczbę elementów w elem.queue |
back
Zwraca odwołanie do ostatniego i ostatnio dodanego elementu z tyłu elementu queue
.
reference back();
const_reference back() const;
Wartość zwracana
Ostatni element elementu .queue
queue
Jeśli wartość jest pusta, wartość zwracana jest niezdefiniowana.
Uwagi
Jeśli zwracana wartość back
elementu jest przypisana do const_reference
obiektu , queue
nie można zmodyfikować obiektu. Jeśli wartość zwracana back
obiektu jest przypisana do reference
obiektu , queue
można go zmodyfikować.
Podczas kompilowania przy użyciu _ITERATOR_DEBUG_LEVEL
wartości zdefiniowanej jako 1 lub 2 wystąpi błąd środowiska uruchomieniowego, jeśli spróbujesz uzyskać dostęp do elementu w pustym queue
elemecie . Aby uzyskać więcej informacji, zobacz Sprawdzone iteratory .
Przykład
// 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
Typ, który zapewnia kontener podstawowy do dostosowania.
typedef Container container_type;
Uwagi
Typ jest synonimem parametru Container
szablonu . Dwie klasy kontenerów sekwencji biblioteki standardowej języka C++ — list
klasa i klasa domyślna deque
— spełniają wymagania, które mają być używane jako kontener podstawowy dla queue
obiektu. Typy zdefiniowane przez użytkownika spełniające wymagania mogą być również używane.
Aby uzyskać więcej informacji na temat Container
, zobacz sekcję Uwagi w queue Class
temacie.
Przykład
Zobacz przykład, aby zapoznać się z przykładem queue
sposobu deklarowania i używania elementu container_type
.
empty
Sprawdza, czy element queue
jest pusty.
bool empty() const;
Wartość zwracana
true
jeśli wartość jest pusta queue
; false
jeśli wartość jest pusta queue
.
Przykład
// 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
Zwraca odwołanie do pierwszego elementu z przodu elementu queue
.
reference front();
const_reference front() const;
Wartość zwracana
Pierwszy element elementu .queue
queue
Jeśli wartość jest pusta, wartość zwracana jest niezdefiniowana.
Uwagi
Jeśli zwracana wartość front
elementu jest przypisana do const_reference
obiektu , queue
nie można zmodyfikować obiektu. Jeśli wartość zwracana front
obiektu jest przypisana do reference
obiektu , queue
można go zmodyfikować.
Funkcja składowa zwraca element reference
do pierwszego elementu kontrolowanej sekwencji, który nie może być żaden.
Podczas kompilowania przy użyciu _ITERATOR_DEBUG_LEVEL
wartości zdefiniowanej jako 1 lub 2 wystąpi błąd środowiska uruchomieniowego, jeśli spróbujesz uzyskać dostęp do elementu w pustym queue
elemecie . Aby uzyskać więcej informacji, zobacz Sprawdzone iteratory .
Przykład
// 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
Usuwa element z przodu obiektu queue
.
void pop();
Uwagi
Aby queue
zastosować funkcję składową, musi być nieistniena. Górna część elementu queue
to pozycja zajmowana przez ostatnio dodany element i jest ostatnim elementem na końcu kontenera.
Przykład
// 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
Dodaje element z tyłu elementu queue
.
void push(const Type& val);
Parametry
val
Element dodany z tyłu elementu queue
.
Uwagi
Tył elementu queue
to pozycja zajmowana przez ostatnio dodany element i jest ostatnim elementem na końcu kontenera.
Przykład
// 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
Tworzy obiekt queue
pusty lub jest kopią podstawowego obiektu kontenera.
queue();
explicit queue(const container_type& right);
Parametry
right
Kontener const
, którego konstrukcja queue
ma być kopią.
Uwagi
Domyślnym kontenerem podstawowym dla programu queue
jest deque
. Można również określić list
jako kontener podstawowy, ale nie można określić vector
parametru , ponieważ nie ma wymaganej pop_front
funkcji składowej.
Przykład
// 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
Zwraca liczbę elementów w elem.queue
size_type size() const;
Wartość zwracana
Bieżąca długość obiektu queue
.
Przykład
// 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
Niepodpisany typ liczb całkowitych, który może reprezentować liczbę elementów w obiekcie queue
.
typedef typename Container::size_type size_type;
Uwagi
Typ jest synonimem size_type
kontenera podstawowego dostosowanego przez element queue
.
Przykład
Zobacz przykład, aby zapoznać się z przykładem queue::front
sposobu deklarowania i używania elementu size_type
.
value_type
Typ reprezentujący typ obiektu przechowywanego jako element w obiekcie queue
.
typedef typename Container::value_type value_type;
Uwagi
Typ jest synonimem value_type
kontenera podstawowego dostosowanego przez element queue
.
Przykład
// 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.
Zobacz też
Bezpieczeństwo wątku w standardowej bibliotece C++
Dokumentacja standardowej biblioteki C++