Sdílet prostřednictvím


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 listnebo jakýkoli jiný sekvencí kontejner, který podporuje operace front, back, push_backa 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, queuea 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ímu stack 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 pouze front k prvkům a back prvkům queue 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 Containerv čá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

truequeue 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