MySQL Java JavaScript PHP Python HTML-CSS C-sharp C++ Go

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"}
}