queue
Třída
Třída adaptéru kontejneru šablony, která poskytuje omezení funkčnosti pro určitý základní typ kontejneru, omezení přístupu k předním a zadním prvkům. Prvky lze přidat na zadní straně nebo odebrat z přední části a prvky lze zkontrolovat na obou končit queue
.
Syntaxe
template <class Type, class Container = deque <Type>>
class queue
Parametry
Type
Datový typ prvku, který má být uložen v souboru queue
.
Container
Typ základního kontejneru použitého k implementaci queue
.
Poznámky
Prvky třídy Type
stanovené v prvním parametru queue
šablony objektu jsou synonymem value_type
a musí odpovídat typu prvku v podkladové třídě Container
kontejneru stanovené druhým parametrem šablony. Musí Type
být přiřaditelné, aby bylo možné kopírovat objekty tohoto typu a přiřazovat hodnoty proměnným daného typu.
Vhodné základní třídy kontejneru pro queue
zahrnutí deque
a list
nebo jakýkoli jiný sekvencí kontejner, který podporuje operace front
, back
, push_back
a pop_front
. Základní třída kontejneru je zapouzdřena v adaptéru kontejneru, která zveřejňuje pouze omezenou sadu členů kontejneru sekvence jako veřejné rozhraní.
Objekty queue
jsou srovnatelné, jsou-li a pouze pokud jsou prvky třídy Type
srovnatelné a jsou menší než srovnatelné, a pouze pokud jsou prvky třídy Type
menší než srovnatelné.
Existují tři typy adaptérů kontejnerů definované standardní knihovnou jazyka C++: stack
, queue
a priority_queue
. Každá z nich omezuje funkčnost některé základní třídy kontejneru tak, aby poskytovala přesně řízené rozhraní na standardní datovou strukturu.
Třída
stack
podporuje datovou strukturu liFO (last-in). Dobrý analog, který byste měli mít na paměti, by byl zásobník plátů. Prvky (desky) lze vložit, zkontrolovat nebo odebrat pouze z horní části zásobníku, což je poslední prvek na konci základního kontejneru. Důvodem použití třídy je omezení pro přístup pouze k hornímustack
prvku.Třída
queue
podporuje datovou strukturu FIFO (first-in). Dobrý analog, který byste měli mít na paměti, by byl lidé, kteří se vysílají do bankovního řekněte. Prvky (osoby) mohou být přidány do zadní části řádku a jsou odebrány z přední části čáry. Je možné zkontrolovat přední i zadní stranu čáry. Důvodem použití třídy je omezení pro přístup pouzefront
k prvkům aback
prvkůmqueue
tímto způsobem.Třída
priority_queue
objednává své prvky tak, aby největší prvek byl vždy na nejvyšší pozici. Podporuje vložení prvku a kontrolu a odebrání horního prvku. Dobrou analogií, kterou byste měli mít na paměti, by byli lidé, kteří se nacházejí v místě, kde jsou uspořádány podle věku, výšky nebo jiného kritéria.
Členové
Konstruktory
Název | Popis |
---|---|
queue |
queue Vytvoří prázdný objekt kontejneru nebo kopii základního objektu kontejneru. |
Typedefs
Název | Popis |
---|---|
container_type |
Typ, který poskytuje základní kontejner, který má být přizpůsoben queue . |
size_type |
Typ celého čísla bez znaménka, který může představovat počet prvků v objektu queue . |
value_type |
Typ, který představuje typ objektu uloženého jako prvek v objektu queue . |
Funkce
Název | Popis |
---|---|
back |
Vrátí odkaz na poslední a naposledy přidaný prvek na zadní straně objektu queue . |
empty |
Testuje, queue jestli je prázdný. |
front |
Vrátí odkaz na první prvek na přední straně objektu queue . |
pop |
Odebere prvek z přední části objektu queue . |
push |
Přidá prvek do zadní části objektu queue . |
size |
Vrátí počet prvků v sadě queue . |
back
Vrátí odkaz na poslední a naposledy přidaný prvek na zadní straně objektu queue
.
reference back();
const_reference back() const;
Návratová hodnota
Poslední prvek queue
. queue
Pokud je tato hodnota prázdná, je vrácená hodnota nedefinovaná.
Poznámky
Pokud je vrácená hodnota back
přiřazena k objektu const_reference
, queue
nelze objekt změnit. Pokud je vrácená hodnota back
přiřazena k objektu reference
, queue
lze objekt upravit.
Při kompilaci pomocí _ITERATOR_DEBUG_LEVEL
definovaného jako 1 nebo 2 dojde k chybě za běhu, pokud se pokusíte získat přístup k prvku v prázdném queue
. Další informace najdete v tématu Kontrola iterátorů .
Příklad
// 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, který poskytuje základní kontejner, který se má přizpůsobit.
typedef Container container_type;
Poznámky
Typ je synonymem pro parametr Container
šablony . Dvě třídy kontejneru sekvence standardní knihovny C++ – list
třída a výchozí deque
třída – splňují požadavky, které se mají použít jako základní kontejner objektu queue
. Uživatelem definované typy, které splňují požadavky, lze použít také.
Další informace naleznete Container
v části Poznámky tématu queue Class
.
Příklad
Podívejte se na příklad queue
, jak deklarovat a používat container_type
.
empty
Testuje, jestli queue
je prázdný.
bool empty() const;
Návratová hodnota
true
queue
pokud je prázdný; false
pokud queue
je neprázdný.
Příklad
// 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
Vrátí odkaz na první prvek na přední straně objektu queue
.
reference front();
const_reference front() const;
Návratová hodnota
První prvek queue
. queue
Pokud je tato hodnota prázdná, je vrácená hodnota nedefinovaná.
Poznámky
Pokud je vrácená hodnota front
přiřazena k objektu const_reference
, queue
nelze objekt změnit. Pokud je vrácená hodnota front
přiřazena k objektu reference
, queue
lze objekt upravit.
Členová funkce vrátí reference
první prvek řízené sekvence, který musí být neprázdný.
Při kompilaci pomocí _ITERATOR_DEBUG_LEVEL
definovaného jako 1 nebo 2 dojde k chybě za běhu, pokud se pokusíte získat přístup k prvku v prázdném queue
. Další informace najdete v tématu Kontrola iterátorů .
Příklad
// 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
Odebere prvek z přední části objektu queue
.
void pop();
Poznámky
Aby queue
se členová funkce použila, musí být nechtěná. Horní část queue
je pozice obsazená naposledy přidaným prvkem a je posledním prvkem na konci kontejneru.
Příklad
// 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
Přidá prvek do zadní části objektu queue
.
void push(const Type& val);
Parametry
val
Prvek přidaný do zadní části objektu queue
.
Poznámky
Zadní část queue
je pozice obsazená naposledy přidaným prvkem a je posledním prvkem na konci kontejneru.
Příklad
// 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
queue
Vytvoří prázdný objekt kontejneru nebo kopii základního objektu kontejneru.
queue();
explicit queue(const container_type& right);
Parametry
right
Kontejner const
, jehož konstrukce queue
má být kopií.
Poznámky
Výchozí základní kontejner pro queue
je deque
. Můžete také zadat list
jako základní kontejner, ale nemůžete zadat vector
, protože chybí požadovaná pop_front
členová funkce.
Příklad
// 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
Vrátí počet prvků v sadě queue
.
size_type size() const;
Návratová hodnota
Aktuální délka queue
.
Příklad
// 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
Typ celého čísla bez znaménka, který může představovat počet prvků v objektu queue
.
typedef typename Container::size_type size_type;
Poznámky
Typ je synonymem základního size_type
kontejneru přizpůsobeného queue
.
Příklad
Podívejte se na příklad queue::front
, jak deklarovat a používat size_type
.
value_type
Typ, který představuje typ objektu uloženého jako prvek v objektu queue
.
typedef typename Container::value_type value_type;
Poznámky
Typ je synonymem základního value_type
kontejneru přizpůsobeného queue
.
Příklad
// 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.
Viz také
Bezpečný přístup z více vláken ve standardní knihovně C++
Standardní knihovna C++ – referenční dokumentace