C ++

Jak používat frontu C ++

Jak používat frontu C ++

Úvod

Fronta je kolekce položek, kde první položka přidaná do seznamu musí být první položkou, která má být následně odstraněna. Jak se do sbírky přidávají položky, zvětšuje se její velikost, tj.E. roste do délky. Kdykoli má být některá položka odstraněna, musí být přidána první. Pokud jsou položky odebírány nepřetržitě, pak další odebraná, je druhá položka; třetí je poté odstraněn atd.

Po odebrání první položky z původního seznamu se druhá stane první položkou. Po odebrání druhé položky se třetí stane první položkou atd.

Dobrým příkladem fronty v reálném životě je, když se lidé seřadí, aby počkali na službu nebo dobro. První osobě se podává první před poslední. Fronta, o které se v tomto kurzu hovoří, je softwarová fronta navržená v C++.

FIFO

FIFO znamená First-In, First-Out. Je to další způsob, jak ocenit frontu. To znamená, že první položka, která vstoupí do seznamu, je první položkou, která má být odstraněna, kdykoli má dojít k odstranění. Začátek seznamu se nazývá hlava nebo přední strana; konec seznamu se nazývá zadní nebo zadní část.

Základní operace

Softwarová fronta musí mít alespoň následující operace:

tam

Tato operace přidá nový prvek do zadní části fronty. Tato operace se oficiálně nazývá, zařadit do fronty.

posun

Tato operace odebere první prvek fronty a druhý prvek se stane novým prvním prvkem. Tato operace se oficiálně nazývá dequeue. Říká se tomu pop v C++.

Tento článek vysvětluje, jak používat datovou strukturu fronty C ++. Měli byste znát C ++ ukazatele a odkazy, abyste pochopili zbytek tohoto článku.

Třída a objekty

Třída je sada proměnných a funkcí, které pracují společně, kde proměnné nemají přiřazené hodnoty. Když jsou proměnným přiřazeny hodnoty, třída se stane objektem. Různé hodnoty dané stejné třídě vedou k různým objektům; to znamená, že různé objekty jsou stejné třídy s různými hodnotami. Vytváření objektu z třídy se říká, že vytváří instanci objektu.

Název, fronta, je třída. Objekt vytvořený ze třídy fronty má název vybraný programátorem.

Funkce, která patří do třídy, je nutná k vytvoření instance objektu z třídy. V C ++ má tato funkce stejný název jako název třídy. Objekty vytvořené (instancované) ze třídy mají programátorům pojmenovaná různá jména.

Vytvoření objektu z třídy znamená konstrukci objektu; to také znamená instanci.

Program C ++, který používá třídu fronty, začíná následujícími řádky v horní části souboru:

#zahrnout
#zahrnout
pomocí jmenného prostoru std;

První řádek je pro vstup / výstup. Druhým řádkem je umožnit programu využívat všechny funkce třídy fronty. Třetí řádek umožňuje programu používat názvy ve standardním jmenném prostoru.

Přetížení funkce

Když mají dva nebo více různých podpisů funkcí stejný název, říká se, že je přetížený. Když je volána jedna funkce, počet a typ argumentů určuje, která funkce je skutečně provedena.

Konstrukce

fronta název()

Následující deklarace vytvoří instanci fronty s názvem que typu int.

fronta que;

Fronta je prázdná. Deklarace začíná vyhrazeným slovem, frontou následovanou lomenými závorkami s datovým typem. Pak máte programátor pojmenovaný do fronty.

Vytváření se seznamem inicializátorů

Následující definice ukazuje, jak vytvořit frontu se seznamem inicializátorů:

fronta que (1.1, 2.2, 3.3, 4.4);

Zničení fronty

Chcete-li zničit frontu, nechte ji jít mimo rozsah.

Přístup k prvku fronty

push (hodnota)

Fronta je seznam First-In-First-Out. Každá hodnota je tedy přidána zezadu. Následující segment kódu vytvoří prázdnou frontu, po které se zezadu přidá pět float hodnot:

fronta que;
que.tlačit (1.1);
que.tlačit (2.2);
que.tlačit (3.3);
que.tlačit (4.4);
que.tlačit (5.5);

velikost () konst

Tím se vrátí počet prvků ve frontě. Následující kód ukazuje:

fronta que;
que.tlačit (1.1); que.tlačit (2.2); que.tlačit (3.3); que.tlačit (4.4); que.tlačit (5.5);
cout << que.size() << '\n';

Výstup je 5.

přední()

Tím se vrátí odkaz na první prvek ve frontě, aniž byste prvek odstranili. Výstup následujícího kódu je 1.1.

fronta que;
que.tlačit (1.1); que.tlačit (2.2); que.tlačit (3.3); que.tlačit (4.4); que.tlačit (5.5);
cout << que.front() << '\n';

Prvek není odebrán z fronty.

přední () konst

Když před konstrukcí fronty předchází const, provede se výraz „front () const“ místo „front ()“. Používá se například v následujícím kódu.

konstantní fronta que (1.1, 2.2, 3.3, 4.4, 5.5);
cout << que.front() << '\n';

Je vrácena konstantní reference. Prvek není odstraněn z vektoru. Prvky fronty nelze změnit.

zadní()

Tím se vrátí odkaz na poslední prvek fronty bez odebrání prvku. Výstup následujícího kódu je 5.5.

fronta que;
que.tlačit (1.1); que.tlačit (2.2); que.tlačit (3.3); que.tlačit (4.4); que.tlačit (5.5);
cout << que.back() << '\n';

zpět () konst

Když před konstrukcí fronty předchází const, provede se výraz „back () const“ místo „back ()“. Používá se například v následujícím kódu.

konstantní fronta que (1.1, 2.2, 3.3, 4.4, 5.5);
cout << que.back() << '\n';

Je vrácena konstantní reference. Prvek není odebrán z fronty. S předchozím const pro konstrukci fronty nelze prvky ve frontě změnit.

Kapacita fronty

velikost () konst

- viz výše

prázdná () konst

To vrátí 1 pro true, pokud ve frontě nejsou žádné prvky, nebo 0 pro false, pokud je fronta prázdná. Následující kód to ilustruje:

fronta que1 (1.1, 2.2, 3.3, 4.4, 5.5);
cout << que1.empty() << '\n';
fronta que2;
cout << que2.empty() << '\n';

Výstupem je:

0
1

Modifikátory front

pop ()

Fronta je FIFO, takže jakýkoli prvek, který má být odstraněn, musí být odstraněn z horní části (hlavy) fronty. Tato členská funkce odebere první prvek bez vrácení. Následující kód to ilustruje:

fronta que (1.1, 2.2, 3.3, 4.4, 5.5);
cout << que.front() << '\n';
que.pop ();
cout << que.size() << '\n';

Výstupem je:

1.1
4

A.vyměnit (b)

Lze zaměnit dvě fronty, jak je znázorněno v tomto segmentu kódu:

fronta que1 (1.1, 2.2, 3.3, 4.4, 5.5);
fronta que2 (10, 20);
que1.swap (que2);
cout << "First element and size of que1:
"<< que1.front() <<", "<< que1.size() << '\n';
cout << "First element and size of que2 "<<
que2.přední() <<", "<< que2.size() << '\n';

Výstupem je:

První prvek a velikost que1: 10, 2

První prvek a velikost que2: 1.1, 5

Upozorňujeme, že v případě potřeby se délka fronty zvýší. Také hodnoty, které neměly nahrazení, jsou nahrazeny nějakou výchozí hodnotou. Datové typy musí být stejného typu.

Rovnost a relační operátoři pro fronty

U běžných znaků v C ++ ve vzestupném pořadí jsou čísla před velkými písmeny, která jsou před malými písmeny. Vesmírná postava přichází před nulu a všechny.

Provozovatelé rovnosti

Vrátí 1 pro true a 0 pro false.

Operátor ==

Vrátí 1, pokud mají dvě fronty stejnou velikost a odpovídající prvky jsou stejné; jinak vrátí 0. Příklad:

fronta que1 ("kind", "něco jiného");
fronta que2 ("zlý");
int num = que1 == que2;
cout << num << '\n';

Výstup je: 0.

The != Operátor

- opak výše uvedeného. Příklad:

fronta que1 ("kind", "něco jiného");
fronta que2 ("zlý");
int num = que1 != que2;
cout << num << '\n';

Výstup je: 1.

Relační operátoři

Vrátí 1 pro true a 0 pro false.

The < Operator

Vrátí 1, pokud je první fronta počáteční podmnožinou druhé fronty, přičemž prvky dvou stejných částí jsou stejné a ve stejném pořadí. Pokud mají obě fronty stejnou velikost nebo různé velikosti a pohybují se zleva doprava, v první frontě se setká s prvkem, který je menší než odpovídající prvek ve druhé frontě, pak se 1 vrátí. Jinak se vrátí 0. Příklad:

fronta que1 ("kind", "něco jiného");
fronta que2 ("zlý");
int num = que1 < que2;
cout << num << '\n';

Výstup je 1. < does not include the case when the size and order are the same.

Provozovatel

- opak výše uvedeného. Příklad:

fronta que1 ("kind", "něco jiného");
fronta que2 ("zlý");
int num = que1> que2;
cout << num << '\n';

Výstup: 0

The <= Operator

- stejný jako < but includes the case when the size and order are the same. Example:

fronta que1 ("kind", "něco jiného");
fronta que2 ("zlý");
int num = que1 <= que2;
cout << num << '\n';

Výstup: 1

Operátor> =

- opak výše uvedeného. Příklad:

fronta que1 ("kind", "něco jiného");
fronta que2 ("zlý");
int num = que1> = que2;
cout << num << '\n';

Výstup: 0

Třída a její instance objekty

Hodnota je pro datový typ, protože instanční objekt je pro třídu. Konstrukce fronty může také přijmout třídu jako datový typ. Ilustruje to následující program:

#zahrnout
#zahrnout
pomocí jmenného prostoru std;
třída TheCla

veřejnost:
int num;
statický znak ch;
void func (char cha, const char * str)

cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';

static void fun (char ch)

if (ch == 'a')
cout << "Official static member function" << '\n';

;
int main ()

TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
fronta que;
que.tlačit (obj1); que.tlačit (obj2); que.tlačit (obj3); que.tlačit (obj4); que.tlačit (obj5);
cout << que.size() << '\n';
návrat 0;

Výstup je 5.

Spojový seznam

Seznam front se odborně nazývá propojený seznam. Existují dva typy propojených seznamů pro frontu: jednotlivě propojený seznam a dvojnásobně propojený seznam.

Jednotlivě propojený prvek seznamu může být implementován strukturou dvou členů. Jeden člen drží ukazatel na další prvek a druhý člen drží vztažný bod (singulární pro data).

Dvojitě propojený prvek seznamu může být implementován strukturou tří členů. Střední člen drží vztažný bod, zatímco první a třetí člen drží ukazatele na své sousední prvky.

Aplikace fronty

Fronta je datová struktura první-první-první. Existují situace ve výpočetní technice, kdy data přicházejí ve formě fronty, což vyžaduje chování typu „první do první“.

Sdílení počítačových zdrojů

Prostředek v počítači je jakákoli fyzická nebo virtuální součást s omezenou dostupností. Zahrnují CPU, grafickou kartu, pevný disk a paměť. Sdílení takového prostředku vyžaduje frontu.

Řešení přerušení

Počítačové periferie musí počítač občas přerušit. S přerušením je třeba zacházet stejným způsobem, jakým dorazili. To potřebuje frontu.

Spravovat informace.

Frontu lze použít například ke správě souborů aplikace pro úlohu, pokud jsou soubory uloženy v počítači.

Závěr

Fronta je datová struktura seznamu, což je buď jednotlivě propojený seznam, nebo dvojnásobně propojený seznam. První prvek, který vstoupí do seznamu, je zpravidla prvním prvkem, který vyjde. C ++ poskytuje strukturu dat fronty ve své standardní knihovně. Kategorie členských funkcí a operátorů dostupných pro tuto strukturu jsou konstrukce fronty, přístup k prvku fronty, kapacita fronty, modifikátory front a operátory přetížené fronty.

Jakákoli datová struktura fronty musí poskytovat alespoň členské funkce push () a pop (). push () znamená, odeslání nového prvku na konec fronty; a pop () znamená odebrání prvku, který je v přední části fronty. Bohužel v C ++ tyto funkce nevracejí hodnotu tlačenou nebo vyskočenou. Abychom tedy poznali poslední prvek před tlačením, musí být použita funkce extra back (); a znát první prvek před vyskakováním, musí být použita funkce extra front ().

Hodnota je pro datový typ, protože instanční objekt je pro třídu. Konkrétní třídu lze tedy použít jako datový typ pro instanci šablony fronty. Různé objekty pro třídu se stanou jako různé hodnoty pro třídu.

Fronta obsahuje aplikace v počítači. Lze jej použít například ke správě souborů aplikace pro úlohu, pokud jsou soubory uloženy v počítači.

Chrys

Hry Jak zobrazit počítadlo FPS v linuxových hrách
Jak zobrazit počítadlo FPS v linuxových hrách
Hraní na Linuxu získalo velký tlak, když společnost Valve v roce 2012 oznámila podporu systému Linux pro klienta Steam a jejich hry. Od té doby se mno...
Hry Jak stáhnout a přehrát Sid Meier's Civilization VI v systému Linux
Jak stáhnout a přehrát Sid Meier's Civilization VI v systému Linux
Úvod do hry Civilization 6 je moderní pojetí klasického konceptu představeného v sérii her Age of Empires. Myšlenka byla docela jednoduchá; začali bys...
Hry Jak nainstalovat a hrát Doom na Linuxu
Jak nainstalovat a hrát Doom na Linuxu
Úvod do Doom Série Doom vznikla v 90. letech po vydání původního Doomu. Byl to okamžitý hit a od té doby herní série získala řadu ocenění a původní Do...