Kā lietot C ++ rindu

How Use C Queue



Ievads

Rinda ir vienumu kolekcija, kur pirmajam sarakstā pievienotajam vienumam ir jābūt pirmajam vienumam, kas jānoņem pēc tam. Tā kā kolekcijai tiek pievienoti priekšmeti, tā apjoms pieaug, t.i., tā garums pieaug. Ikreiz, kad kāds vienums ir jānoņem, tam jāpievieno pirmais. Ja vienumi tiek noņemti nepārtraukti, tad nākamais noņemtais ir otrais vienums; pēc tam trešais tiek noņemts utt.

Pēc sākotnējā saraksta pirmā vienuma noņemšanas otrais kļūst par pirmo vienumu. Pēc otrā vienuma noņemšanas trešais kļūst par pirmo vienumu utt.







Labs reālās dzīves rindas piemērs ir tad, kad cilvēki stāv rindā, lai gaidītu pakalpojumu vai preces. Pirmā persona tiek pasniegta vispirms pirms pēdējās. Tomēr rinda, par kuru runāja šajā apmācībā, ir programmatūras rinda, kā paredzēts C ++.



FIFO

FIFO apzīmē First-In, First-Out. Tas ir vēl viens veids, kā novērtēt rindu. Tas nozīmē, ka pirmais vienums, kas iekļūst sarakstā, ir pirmais vienums, kas jānoņem, kad vien notiek noņemšana. Saraksta sākumu sauc par galvu vai priekšpusi; saraksta beigas sauc par muguru vai asti.



Būtiskas darbības

Programmatūras rindai ir jāveic vismaz šādas darbības:





spiest

Šī darbība rindas aizmugurē pievieno jaunu elementu. Šo operāciju oficiāli sauc par enqueue.



maiņa

Šī darbība noņem rindas pirmo elementu, un otrais elements kļūst par jauno pirmo elementu. Šo operāciju oficiāli sauc par dequeue. C ++ to sauc par popu.

Šajā rakstā ir paskaidrots, kā izmantot C ++ rindas datu struktūru. Lai saprastu pārējo šo rakstu, jums jāzina C ++ norādes un atsauces.

Klase un objekti

Klase ir mainīgo un funkciju kopums, kas darbojas kopā, ja mainīgajiem nav piešķirtas vērtības. Kad mainīgajiem tiek piešķirtas vērtības, klase kļūst par objektu. Dažādas vērtības, kas piešķirtas vienai klasei, rada dažādus objektus; tas ir, dažādi objekti ir viena klase ar dažādām vērtībām. Tiek uzskatīts, ka objekta izveide no klases ir objekta eksponēšana.

Nosaukums, rinda, ir klase. No rindas klases izveidotam objektam ir programmētāja izvēlēts nosaukums.

Funkcija, kas pieder klasei, ir nepieciešama, lai parādītu objektu no klases. C ++ šai funkcijai ir tāds pats nosaukums kā klases nosaukumam. No klases izveidotajiem (paraugajiem) objektiem programmētājs ir piešķīris dažādus nosaukumus.

Izveidot objektu no klases nozīmē konstruēt objektu; tas nozīmē arī momentānošanu.

C ++ programma, kas izmanto rindu klasi, sākas ar šādām rindām faila augšdaļā:

#iekļaut
#iekļaut
izmantojot nosaukumvietas std;

Pirmā rinda ir paredzēta ievadīšanai/izvadīšanai. Otrā rinda ir ļaut programmai izmantot visas rindas klases funkcijas. Trešā rinda ļauj programmai izmantot nosaukumus standarta nosaukumu telpā.

Funkcijas pārslodze

Ja diviem vai vairākiem dažādu funkciju parakstiem ir vienāds nosaukums, tiek uzskatīts, ka šis nosaukums ir pārslogots. Izsaucot vienu funkciju, argumentu skaits un veids nosaka, kura funkcija tiek faktiski izpildīta.

Būvniecība

rinda<tipa>vārds()

Šajā deklarācijā tiek parādīta rinda ar nosaukumu, rindas veids int.

rinda<int>ka;

Rinda ir tukša. Deklarācija sākas ar rezervēto vārdu, rinda, kam seko leņķa iekavas ar datu tipu. Tad jums ir programmētāja vārds rindai.

Konstruēšana, izmantojot inicializētāju sarakstu

Šī definīcija parāda, kā izveidot rindu ar inicializētāju sarakstu:

rinda<peldēt>ka({1.1, 2.2, 3.3, 4.4});

Rindas iznīcināšana

Lai iznīcinātu rindu, vienkārši ļaujiet tai iziet no darbības jomas.

Piekļuve rindas elementam

spiediens (vērtība)

Rinda ir pirmais ienākošais saraksts. Tātad katra vērtība tiek pievienota no aizmugures. Šis koda segments izveido tukšu rindu, pēc kuras no aizmugures tiek pievienotas piecas peldošās vērtības:

rinda<peldēt>ka;

ka.spiest(1.1);
ka.spiest(2.2);
ka.spiest(3.3);
ka.spiest(4.4);
ka.spiest(5.5);

lielums () konst

Tādējādi tiek atgriezts rindā esošo elementu skaits. Šis kods ilustrē:

rinda<peldēt>ka;
ka.spiest(1.1);ka.spiest(2.2);ka.spiest(3.3);ka.spiest(4.4);ka.spiest(5.5);
izmaksas<<ka.Izmērs() << ' n';

Izeja ir 5.

priekšā ()

Tas atgriež atsauci uz rindas pirmo elementu, nenoņemot elementu. Šāda koda izvade ir 1.1.

rinda<peldēt>ka;
ka.spiest(1.1);ka.spiest(2.2);ka.spiest(3.3);ka.spiest(4.4);ka.spiest(5.5);
izmaksas<<ka.priekšā() << ' n';

Elements netiek noņemts no rindas.

front () const

Ja rindas konstrukcijas priekšā ir konst, izteiksme front () const tiek izpildīta front () vietā. Piemēram, tas tiek izmantots šādā kodā.

konstrinda<peldēt>ka({1.1, 2.2, 3.3, 4.4, 5.5});
izmaksas<<ka.priekšā() << ' n';

Tiek atgriezta pastāvīga atsauce. Elements netiek noņemts no vektora. Rindas elementus nevar mainīt.

atpakaļ ()

Tas atgriež atsauci uz rindas pēdējo elementu, nenoņemot elementu. Šāda koda izvade ir 5.5.

rinda<peldēt>ka;
ka.spiest(1.1);ka.spiest(2.2);ka.spiest(3.3);ka.spiest(4.4);ka.spiest(5.5);
izmaksas<<ka.atpakaļ() << ' n';

atpakaļ () konst

Ja rindas konstrukcijas priekšā ir konst, izteiksme back () const tiek izpildīta, nevis back (). Piemēram, tas tiek izmantots šādā kodā.

konstrinda<peldēt>ka({1.1, 2.2, 3.3, 4.4, 5.5});
izmaksas<<ka.atpakaļ() << ' n';

Tiek atgriezta pastāvīga atsauce. Elements netiek noņemts no rindas. Izmantojot iepriekšējo rindas konstrukcijas konstantu, rindas elementus nevar mainīt.

Rindas ietilpība

lielums () konst

- Skatīt iepriekš

tukšs () konst

Tas atgriež 1 par patiesu, ja rindā nav elementu, vai 0 par nepatiesu, ja rinda ir tukša. To ilustrē šāds kods:

rinda<peldēt>tas 1({1.1, 2.2, 3.3, 4.4, 5.5});
izmaksas<<tas 1.tukšs() << ' n';
rinda<peldēt>tas 2;
izmaksas<<tas 2.tukšs() << ' n';

Rezultāts ir šāds:

0
1

Rindas modifikatori

pop ()

Rinda ir FIFO, tāpēc visi elementi, kas ir jānoņem, ir jānoņem no rindas augšdaļas (galvas). Šī dalībnieka funkcija noņem pirmo elementu, to neatgriežot. To ilustrē šāds kods:

rinda<peldēt>ka({1.1, 2.2, 3.3, 4.4, 5.5});
izmaksas<<ka.priekšā() << ' n';
ka.pops();
izmaksas<<ka.Izmērs() << ' n';

Rezultāts ir šāds:

1.1
4

a. maiņa (b)

Var nomainīt divas rindas, kā parādīts šajā koda segmentā:

rinda<peldēt>tas 1({1.1, 2.2, 3.3, 4.4, 5.5});
rinda<peldēt>tas 2({10, divdesmit});
tas 1.apmainīt(tas 2);
izmaksas<< Pirmais rindas elements un lielums:
'
<<tas 1.priekšā() <<','<<tas 1.Izmērs() << ' n';
izmaksas<< 'Pirmais elements un que2 lielums'<<
tas 2.priekšā() <<','<<tas 2.Izmērs() << ' n';

Rezultāts ir šāds:

Pirmais elements un rindas lielums1: 10, 2

Pirmais elements un que2 lielums: 1.1, 5

Ņemiet vērā, ka, ja nepieciešams, rindas garums tiek palielināts. Arī vērtības, kurām nebija aizstājēju, tiek aizstātas ar kādu noklusējuma vērtību. Datu tipiem jābūt viena veida.

Rindu vienlīdzības un attiecību operatori

Parastajām C ++ rakstzīmēm augošā secībā cipari ir pirms lielajiem burtiem, bet pirms mazajiem burtiem. Kosmosa raksturs ir pirms nulles, un tie visi.

Vienlīdzības operatori

Atgriež 1 par patiesu un 0 par nepatiesu.

== Operators

Atgriež 1, ja abām rindām ir vienāds izmērs un atbilstošie elementi ir vienādi; pretējā gadījumā tas atgriež 0. Piemērs:

rinda<konst char*>tas 1({'laipns', 'kaut kas cits'});
rinda<konst char*>tas 2({'ļauns'});
intuz vienu=tas 1==tas 2;
izmaksas<<uz vienu<< ' n';

Rezultāts ir: 0.

The! = Operators

- pretēji iepriekš minētajam. Piemērs:

rinda<konst char*>tas 1({'laipns', 'kaut kas cits'});
rinda<konst char*>tas 2({'ļauns'});
intuz vienu=tas 1! =tas 2;
izmaksas<<uz vienu<< ' n';

Rezultāts ir šāds: 1.

Attiecību operatori

Atgriež 1 par patiesu un 0 par nepatiesu.

The

Atgriež 1, ja pirmā rinda ir otrās rindas sākotnējā apakškopa, un divu vienādu daļu elementi ir vienādi un tādā pašā secībā. Ja abas rindas ir vienāda izmēra vai dažāda lieluma un pārvietojas no kreisās uz labo pusi, pirmajā rindā tiek konstatēts elements, kas ir mazāks par atbilstošo elementu otrajā rindā, tad 1 joprojām tiks atgriezts. Pretējā gadījumā tiek atgriezts 0. Piemērs:

rinda<konst char*>tas 1({'laipns', 'kaut kas cits'});
rinda<konst char*>tas 2({'ļauns'});
intuz vienu=tas 1<tas 2;
izmaksas<<uz vienu<< ' n';

Izeja ir 1.

> Operators

- pretēji iepriekš minētajam. Piemērs:

rinda<konst char*>tas 1({'laipns', 'kaut kas cits'});
rinda<konst char*>tas 2({'ļauns'});
intuz vienu=tas 1>tas 2;
izmaksas<<uz vienu<< ' n';

Izeja: 0

The<= Operator

- tāds pats kā rinda<konst char*>tas 1({'laipns', 'kaut kas cits'});
rinda<konst char*>tas 2({'ļauns'});
intuz vienu=tas 1<=tas 2;
izmaksas<<uz vienu<< ' n';

Izeja: 1

> = Operators

- pretēji iepriekš minētajam. Piemērs:

rinda<konst char*>tas 1({'laipns', 'kaut kas cits'});
rinda<konst char*>tas 2({'ļauns'});
intuz vienu=tas 1> =tas 2;
izmaksas<<uz vienu<< ' n';

Izeja: 0

Klase un tās ieviestie objekti

Vērtība attiecas uz datu tipu, tāpat kā eksponēts objekts - uz klasi. Rindas konstrukcija var arī pieņemt klasi kā datu tipu. Šī programma to ilustrē:

#iekļaut
#iekļaut
izmantojot nosaukumvietas std;
klase TheCla
{
publiski:
intuz vienu;
statisks charch;
spēkā neesošsfunkciju(char, konst char *lpp)
{
izmaksas<< 'Tur ir ' <<uz vienu<< 'grāmatas vērts' <<<<lpp<< 'veikalā.' << ' n';
}
statisks spēkā neesošsjautri(charch)
{
ja (ch== 'uz')
izmaksas<< “Oficiālā statiskā dalībnieka funkcija” << ' n';
}
};
intgalvenais()
{
TheCla obj1;TheCla obj2;TheCla obj3;TheCla obj4;TheCla obj5;
rinda<TheCla>ka;
ka.spiest(obj1);ka.spiest(obj2);ka.spiest(obj3);ka.spiest(obj4);ka.spiest(obj5);
izmaksas<<ka.Izmērs() << ' n';
atgriezties 0;
}

Izeja ir 5.

Saistītais saraksts

Rindu sarakstu tehniski sauc par saistītu sarakstu. Rindai ir divu veidu saistītie saraksti: atsevišķi piesaistīts saraksts un divreiz saistīts saraksts.

Atsevišķi saistītu saraksta elementu var īstenot ar divu dalībnieku struktūru. Viens dalībnieks tur rādītāju uz nākamo elementu, bet otrs - atskaites punktu (vienskaitlis datiem).

Divkārši saistītu saraksta elementu var īstenot ar trīs locekļu struktūru. Vidējais elements satur atskaites punktu, bet pirmais un trešais - norādes uz blakus esošajiem elementiem.

Rindas lietojumprogrammas

Rinda ir pirmā struktūrā pirmā datu struktūra. Datortehnikā pastāv situācijas, kad dati tiek ievietoti rindas veidā, un tāpēc ir nepieciešama uzvedība, kas notiek vispirms.

Datoru resursu koplietošana

Resurss datorā ir jebkura fiziska vai virtuāla ierobežotas pieejamības sastāvdaļa. Tajos ietilpst CPU, videokarte, cietais disks un atmiņa. Šāda resursa koplietošanai ir nepieciešama rinda.

Apstrādes pārtraukumi

Datoru perifērijas ierīcēm laiku pa laikam jāpārtrauc datora darbība. Pārtraukumi jārīkojas tādā pašā veidā, kādā tie ieradās. Tam nepieciešama rinda.

Pārvaldiet informāciju.

Rindu var izmantot, piemēram, lai pārvaldītu darba lietojumprogrammu failus, ja faili tiek saglabāti datorā.

Secinājums

Rinda ir saraksta datu struktūra, kas ir vai nu atsevišķi saistīts saraksts, vai divreiz saistīts saraksts. Parasti pirmais elements, kas nonāk sarakstā, ir pirmais elements, kas iznāk. C ++ savā standarta bibliotēkā nodrošina rindas datu struktūru. Šai struktūrai pieejamās dalībnieku funkciju un operatoru kategorijas ir rindu veidošana, piekļuve rindas elementiem, rindas ietilpība, rindas pārveidotāji un rindas pārslogotie operatori.

Jebkurai rindas datu struktūrai ir jānodrošina vismaz push () un pop () dalībnieka funkcijas. push () nozīmē jauna elementa nosūtīšanu rindas aizmugurē; un pop () nozīmē noņemt elementu, kas atrodas rindas priekšpusē. Diemžēl C ++ šīs funkcijas neatgriež nospiesto vai uzlēkto vērtību. Tātad, lai uzzinātu pēdējo elementu pirms stumšanas, ir jāizmanto papildu atpakaļ () funkcija; un, lai uzzinātu pirmo elementu pirms atvēršanas, ir jāizmanto papildu priekšējā () funkcija.

Vērtība attiecas uz datu tipu, tāpat kā eksponēts objekts - uz klasi. Tātad konkrētu klasi var izmantot kā datu tipu rindas veidnes paraugam. Dažādi klases objekti klasē kļūst kā dažādas vērtības.

Rindā ir lietojumprogrammas datorā. To var izmantot, piemēram, lai pārvaldītu darba lietojumprogrammu failus, ja faili ir saglabāti datorā.

Chrys