====== 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]]