====== Queue ======
Szablon queue to jeden z adaptatorów kontenerów sekwencyjnych, czyli takich które przystosowują standardowe kontenery STL do specjalnych celów. Szablon klasy pozwala danej klasie (domyślnie deque) udostępniać typowy interfejs kolejki typu FIFO.
Szablon queue w odróżnieniu do deque nie pozwala na dostęp swobodny do elementów kolejki, ani na iteracje po kontenerze. Możliwe są podstawowe operacje: dodawanie elementu na koniec kolejki, usuwanie elementu z początku kolejki, sprawdzenie wartości początkowego i końcowego elementu, określenie liczby elementów oraz sprawdzenie czy kolejka jest pusta.
Interfejs kolejki z uwzględnieniem wewnętrznego interfejsu kolejki:
{{:opis_kontenera:queue.png|}}
Kolejka zdefiniowana jest w pliku nagłówkowym queue:
#include
Deklaracja kolejki domyślnie zakłada użycie jako kontenera przechowującego elementy kontenera deque:
namespace std
{
template >
class queue;
}
gdzie: _Tp – typ przechowywanych elementów, _Sequence – parametr opcjonalny, mówi jaki kontener jest używany do przechowywania elementów.
**Przykład użycia:**
std::queue liczby; // przechowuje liczby całkowite, kontener deque
// używany w celu przechowywania elementów
queue > liczby; // jak powyżej, tyle, że do
// przechowywania elementów użyliśmy
// kontenera list
====== Definicje typu ======
^ Typ ^ Opis ^
|''queue::value_type''|Określa rodzaj elementów umieszczonych w kontenerze. Równoważne składowej ''container::value_type''|
|''queue::size_type''|Określa rozmiar umieszczonych elementów. Równoważne składowej ''container::size_type''|
|''queue::container_type''|Określa rodzaj kontenera.|
====== Metody klasy Queue ======
^ Metoda ^ Opis ^
|''explicit queue::queue()''|Konstruktor tworzący pustą kolejkę.|
|''explicit queue::queue(const Container& c)''|Konstruktor tworzący kolejkę inicjalizowaną elementami umieszczonymi w kontenerze c. Kopiuje wszystkie elementy z tego kontenera.|
|''bool queue::empty() const''|Zwraca true gdy kolejka jest pusta, w przeciwnym wypadku zwraca false. Równoważna zapisowi: ''queue::size() == 0'' ale może działać szybciej.|
|''size_type queue::size() const''|Zwraca liczbę elementów w kolejce. Aby sprawdzić czy kolejka jest pusta, używajmy ''queue::empty()''|
|''value_type& queue::front()''|Metoda zwraca referencję do elementu znajdującego się na początku kolejki. Zanim ją wywołamy należy upewnić się, czy w kolejce znajdują się jakieś elementy (''queue::size > 0''), gdyż w przypadku wywołania ich dla pustej kolejki, zachowanie jest nieokreślone.|
|''const value_type& queue::front() const''|Metoda zwraca stałą referencję do elementu znajdującego się na początku kolejki. Zanim ją wywołamy należy upewnić się, czy w kolejce znajdują się jakieś elementy (''queue::size > 0''), gdyż w przypadku wywołania ich dla pustej kolejki, zachowanie jest nieokreślone.|
|''value_type& queue::back()''|Metoda zwraca referencję do ostatniego elementu znajdującego się w kolejce. Zanim ją wywołamy należy upewnić się, czy w kolejce znajdują się jakieś elementy ''queue::size > 0''), gdyż w przypadku wywołania ich dla pustej kolejki, zachowanie jest nieokreślone.|
|''const value_type& queue::back() const''|Metoda zwraca stałą referencję do ostatniego elementu znajdującego się w kolejce. Zanim ją wywołamy należy upewnić się, czy w kolejce znajdują się jakieś elementy ''queue::size > 0''), gdyż w przypadku wywołania ich dla pustej kolejki, zachowanie jest nieokreślone.|
|''void queue::push(const value_type& x)''|Wstawia kopię elementu x na koniec kolejki|
|''void queue::pop()''|Usuwa pierwszy element kolejki. Nie zwraca tego elementu, dlatego gdy chcemy go przetworzyć, to przed wywołaniem ''queue::pop()'' należy wywołać ''queue::front()'' w celu przetworzenie elementu. Zanim wywołamy ''queue::pop()'' należy upewnić się, czy w kolejce znajdują się jakieś elementy (''queue::size > 0''), gdyż w przypadku wywołania ''queue::pop('') dla pustej kolejki, zachowanie jest nieokreślone.|
|[[queue#Operatory|Operatory]]|Przypisywanie i porównywanie kolejek.|
==== Operatory ====
bool operator==(const queue& c1, const queue& c2);
bool operator!=(const queue& c1, const queue& c2);
bool operator<(const queue& c1, const queue& c2);
bool operator>(const queue& c1, const queue& c2);
bool operator<=(const queue& c1, const queue& c2);
bool operator>=(const queue& c1, const queue& c2);
Porównywane kolejki są jednakowe, gdy:
* zawierają taką samą liczbę elementów
* wszystkie elementy są jednakowe
* wszystkie elementy są umieszczone w tej samej kolejności
====== Odnośniki ======
[[http://www.cplusplus.com/reference/stl/queue/|C++ Reference]]