Udostępnij za pośrednictwem


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 queueelementu .

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_backi 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, queuei 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żywania stack 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 tylko front do elementów i back w ten sposób jest powodem używania queue 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_referenceobiektu , queue nie można zmodyfikować obiektu. Jeśli wartość zwracana back obiektu jest przypisana do referenceobiektu , 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 queueelemecie . 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 Containerszablonu . 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_referenceobiektu , queue nie można zmodyfikować obiektu. Jeśli wartość zwracana front obiektu jest przypisana do referenceobiektu , 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 queueelemecie . 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ć vectorparametru , 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++