Datová struktura “queue”
C++ 11

image_printTisk

Fronta funguje na principu zvaném FIFO (First-In First-Out). To znamená, že prvek, který byl do fronty vložen dříve, bude také dříve zpracováván. V podstatě můžeme říci, že prvky vyjímáme a zpracováváme ve stejném pořadí, jako jsou vkládány.

Deklarace

Způsob deklarace fronty ukazuje následující příklad.

#include <queue>
#include <string>
using namespace std;

struct Employee {
    string name;
    int wage;
};

int main() {
    queue<int> intQueue;
    queue<Employee> empQueue;
    return 0;
}

Napřed je nutné vložit hlavičkový soubor <queue>, který obsahuje její definici. Potom stačí uvést identifikátor queue, do znaků < a > datový typ prvku a doplnit jméno proměnné. Na příkladu je vidět, že můžeme pracovat jak se základními datovými typy, tak i s uživatelsky definovanými.

Užití

Nové prvky se vkládají do fronty pomocí metody push(). Jejich následné zpracování probíhá tak, že další prvek získáme pomocí metody front(). Po jeho zpracování jej můžeme vyjmout zavoláním metody jménem pop().  Za zmínku stojí i metoda empty(), která testuje, zda je fronta prázdná. Tato metoda se využívá hlavně v cyklech, ve kterých chceme zpracovat všechny položky dané fronty.

Seznam metod

empty


Tato metoda testuje, zda je fronta prázdná. Pokud fronta neobsahuje žádné položky, vrací kladnou logickou hodnotu true, jinak vrací false.

size


Metoda size() vrací počet položek umístěných v datové struktuře fronta.

front


Metoda front() vrací první položku ve frontě, určenou ke zpracování.

back


Metoda back() vrací poslední vloženou položku do fronty.

push a pop


Metoda push vkládá na konec fronty nový prvek a metoda pop() slouží k opačné operace, tedy vyjmutí prvku na začátku fronty.

#include &lt;iostream&gt;
#include &lt;queue&gt;
using namespace std;

int main() {
    queue&lt;int&gt; q;
    q.push(1);
    q.push(2);
    q.push(3);
    
    while(! q.empty()) {
        cout &lt;&lt; q.front() &lt;&lt; &quot;;&quot;;
        q.pop();
    }
}
Unable to connect to the JDoodle service.

emplace


#include &lt;iostream&gt;
#include &lt;queue&gt;
using namespace std;

struct Employee {
    string name;
    int wage;
    
    Employee(string n, int w): name(n), wage(w) {}
};

ostream&amp; operator&lt;&lt;(ostream&amp; os, const Employee&amp; e) {
    os &lt;&lt; &quot;Jmeno: &quot; &lt;&lt; e.name &lt;&lt; &quot;, plat: &quot; &lt;&lt; e.wage &lt;&lt; endl;
    return os;
}

int main() {
    queue&lt;Employee&gt; q;
    q.emplace(&quot;Aleš&quot;, 20000);
    q.emplace(&quot;Monika&quot;, 30000);
    q.emplace(&quot;Jaroslav&quot;, 15000);
    
    while(! q.empty()) {
        cout &lt;&lt; q.front();
        q.pop();
    }
    return 0;
}
Unable to connect to the JDoodle service.

image_printTisk
Datová struktura “queue”
C++ 11
Ohodnoťte tento článek

Související články

  • Datová struktura “stack” Datová struktura zásobník funguje na principu zvaném LIFO (Last In First Out). To znamená, že položka, která do něj byla vložena poslední,  je jako první vyjmuta. V podstatě můžeme říci, […]
  • Aritmetika ukazatelů a pole V tomto článku si vysvětlíme, co je aritmetika ukazatelů. Ukážeme si význam a aplikaci dalších operátorů vztahujících se k ukazatelům a popíšeme si jejich vzájemné vztahy k polím různých […]
  • Datová struktura “priority_queue” Někdy potřebujeme jiné zpracování než sekvenční dle pořadí vložení prvků jako u klasické fronty. Řekněme, že prvky mají například číselně vyjádřenou prioritu své důležitosti a my je chceme […]
  • Práce se soubory pomocí knihovny STL V tomto článku si popíšeme základy práce se soubory pomocí knihovny STL. Práce se soubory pomocí této knihovny je mnohem snadnější, než pomocí staršího přístupu pomocí standardní knihovny […]
  • Relační operátory Tento článek pojednává o porovnávacích, jinak nazývané také relačních,  operátorech v jazyce C++. Souhrnně se o nich zmíníme, ukážeme si opět rozdíl jejich zápisu od klasické matematiky a […]
  • Obsluha chyb pomocí výjimek Tento článek je článkem úvodním tematice obsluhy chyb v jazyce C++. V tomto článku si představíme motivaci zavedení výjimek jazyka C++ jako aparátu pro detekci a zpracování chyb. Dále […]