Coada std::queue
Clasa std::queue<T> reprezintă o coadă – un container care funcționează după principiul FIFO (first-in, first-out – „primul intrat, primul ieșit”), adică primul element adăugat este și primul extras. Este un container similar cu o coadă obișnuită din viața de zi cu zi.
Pentru a lucra cu o coadă trebuie inclus fișierul antet <queue>. Definirea unei cozi goale:
#include <iostream>
#include <queue>
int main()
{
std::queue<std::string> queue; // coadă goală
}
Dimensiunea cozii
Cu ajutorul funcției size() putem obține numărul de elemente din coadă, iar cu empty() putem verifica dacă aceasta este goală (dacă returnează true, înseamnă că nu are elemente):
#include <iostream>
#include <queue>
int main()
{
std::queue<std::string> queue;
if(queue.empty())
{
std::cout << "queue is empty" << std::endl;
}
std::cout << "queue size: " << queue.size() << std::endl; // queue size: 0
}
Adăugarea elementelor
Pentru a adăuga elemente în coadă se folosește funcția push(), căreia i se transmite elementul dorit:
#include <iostream>
#include <queue>
int main()
{
std::queue<std::string> queue; // coadă goală
// adăugăm trei elemente
queue.push("Tom");
queue.push("Bob");
queue.push("Sam");
std::cout << "queue size: " << queue.size() << std::endl; // queue size: 3
}
Accesarea elementelor
Putem accesa doar primul și ultimul element din coadă – pentru aceasta folosim funcțiile front() (primul) și back() (ultimul):
#include <iostream>
#include <queue>
int main()
{
std::queue<std::string> queue; // coadă goală
queue.push("Tom");
queue.push("Bob");
queue.push("Sam");
std::cout << "First: " << queue.front() << std::endl; // First: Tom
std::cout << "Last: " << queue.back() << std::endl; // Last: Sam
}
Ștergerea elementelor
Pentru a elimina elementul din fața cozii se folosește funcția pop():
queue.pop();
Combinând această funcție cu front() putem extrage toate elementele din coadă:
#include <iostream>
#include <queue>
int main()
{
std::queue<std::string> queue;
queue.push("Tom");
queue.push("Bob");
queue.push("Sam");
while (!queue.empty()) // cât timp coada nu este goală
{
std::cout << queue.front() << std::endl;
queue.pop(); // extragem primul element
}
}
În acest caz, cât timp coada nu este goală, se afișează în consolă primul element folosind front(), apoi este eliminat cu pop(). Ieșirea programului:
Tom
Bob
Sam
Inițializarea cu un deque
Coada poate fi inițializată cu o altă coadă sau cu un deque (coadă dublu-extremă):
#include <iostream>
#include <queue>
int main()
{
std::deque<std::string> people{"Tom", "Sam", "Bob"};
std::queue<std::string> queue {people};
while (!queue.empty())
{
std::cout << queue.front() << std::endl;
queue.pop();
}
}
Schimbul de elemente
Cu ajutorul funcției swap() putem schimba elementele între două cozi:
#include <iostream>
#include <queue>
int main()
{
std::queue<std::string> queue1 {std::deque<std::string>{"Alice", "Kate"}};
std::queue<std::string> queue2;
queue2.push("Tom");
queue2.push("Bob");
// schimbăm conținutul între queue1 și queue2
queue1.swap(queue2);
// queue1 = {"Tom", "Bob"}
// queue2 = {"Alice", "Kate"}
}