C ++ Deque -funksjon

C ++ Deque -funksjon
Standard Template Library (STL) gir også en klasse som heter "Deque" som implementerer alle funksjonalitetene for denne datastrukturen. En sekvensiell beholder som fungerer som en dobbel-endekø-datastruktur i C ++ kalles STL-deque.

Elementer blir ofte lagt til bakfra og fjernes fra fronten i en normal kø. Derimot kan vi legge til og fjerne komponentene fra fronten og baksiden av en deque. Implementering av en deque i C ++ kan gjøres ved hjelp av enten en matrise eller en koblet liste.

Nedenfor er en liste over Deque's Array -implementering. Vi benyttet de sirkulære matriser for å implementere den fordi det er en dobbelkø. Den dobbelte køen er raskere og mer effektiv enn noen annen kø når det gjelder å legge til og fjerne komponentene fra begge ender.

Deques representasjon

De tidkrevende aspektene ved å gjøre forskjellige deque-prosesser inkluderer:

  • Få til elementer: O (1)
  • Element tillegg eller sletting- o (n)
  • Tillegg eller sletting av komponenter i begynnelsen av enden (1)

Typer deque

La oss sjekke ut typene relatert til Deque i C++.

Inngangsbegrenset deque

Inngang er innesperret i den ene enden, men tillatt i de to andre.

Utgangsbegrenset deque

I denne deque er produksjonen forbudt i den ene enden, men innsetting er tillatt i begge ender.

Opprette C ++ Deque -funksjon

Vi må først inkludere deque header -filen for å generere en deque i C++.

#inkludere

Etter å ha importert denne filen, kan følgende syntaks brukes til å generere en deque:

# Deque deque-name;

Datatypen som vi ønsker å lagre i deque er indikert med objekt-type i dette tilfellet. For eksempel: int, float, streng osv. Deque-name er et variabelt navn for dataene vi skal bruke.

Initialisere deque -funksjonen

I C ++ kan deque -funksjonen initialiseres på følgende måter:

Deque arr = 1, 3, 7, 0, 5, 8;
Deque arr 1, 3, 7, 0, 5, 8;

Begge disse metodene brukes til å initialisere deque. I begge disse deque -navnene initialiseres “ARR” med heltallverdier 1, 3, 7, 0, 5, 8.

Metoder for deque

Følgende er metodene for deque:

  • Sett inn(): Legger til et nytt element og gir tilbake en iterator med den første av de nylig tilførte elementene som poeng.
  • Rbegin (): Genererer en omvendt iterator som peker på Deques siste verdi.
  • Rend (): Genererer en omvendt iterator med en startposisjon før Deques opprinnelse.
  • Cbegin (): Returnerer en konstant iterator som alltid peker på beholderens første element; Som et resultat kan iteratoren bare brukes til å krysse deque og ikke bli endret.
  • MAX_SIZE (): Antall elementer en deque container kan holde returneres av denne funksjonen.
  • Tildele(): Brukes til å tilordne verdier til en deque container som er den samme eller annerledes.
  • Endre størrelse (): Funksjon som brukes til å endre deques størrelse.
  • Push_back (): Ved hjelp av denne funksjonen kan komponenter legges fra baksiden til en deque.
  • Front(): Det brukes til å referere til deque -beholderens første element.
  • Tilbake(): Det brukes til å referere til deque -beholderens siste element.
  • Klar(): Det brukes til å fjerne alle elementene fra deque ved å redusere størrelsen til 0.
  • Viske ut(): Brukes til å slette objektene fra en beholder fra et bestemt punkt eller rekkevidde.
  • Deque :: tom (): Det brukes til å avgjøre om deque er tom.
  • Operatør =: Brukes til å tildele en ny data til beholderen og bytte ut de gamle.
  • Operatør[]: Brukes til å referere til elementet i operatøren på det spesifiserte stedet.
  • På(): Brukes til å referere til komponenten som er til stede på stedet som er spesifisert som funksjonens parameter.
  • Bytte(): Denne funksjonen brukes til å bytte ut deques av samme datatype.
  • Begynne(): Det brukes til å gi en iterator som peker på det opprinnelige objektet med deque -beholderen.
  • Emplace_front (): Et nytt element settes inn i deque -beholderen ved hjelp av denne funksjonen. Begynnelsen av deque blir endret for å inkludere tilleggskomponenten.
  • Emplace_back (): Brukes til å tilføre en ny verdi til deque -beholderen. Den nye komponenten er inkludert helt på slutten av deque.

Deque datastruktur

La oss sjekke deque -datastrukturdetaljene i følgende avsnitt:

Prosedyrer på en deque

Disse trinnene må følges før de utfører de påfølgende operasjonene:

Trinn 1: Ta en N-dimensjonal matrise (Deque). I den første posisjonen, plasser to pekere og sett foran = -1 og bak = 0.

Sett opp en deque -matrise og pekere.

Innsetting foran

Trinn 1: Denne handlingen legger til en komponent foran. Sjekk frontens beliggenhet.

Hvis fronten er mindre enn 5, må du tilbakestille fronten til N-1 (siste indeks).

Steg 2: Reduser fronten med 1 om nødvendig. Legg nå den nye tasten N i matrisen [foran]. La oss anta n = 6.

Innføring bak

Trinn 1: Denne handlingen legger til en komponent i sjeldne. Forsikre deg om at matrisen ikke er full.

Steg 2: Hvis køen er full, tilbakestiller bakverdien til 0 (r = 0). Ellers løfter du det sjeldne med 1.

Trinn 3: I en matrise [bak], legg til den nye tasten 6.

Fjern fra fronten

Trinn 1: Et element foran fjernes under prosessen. Forsikre deg om at deque ikke er tom.

Steg 2: Sletting er ikke mulig hvis deque er tom (foran = -1) (understrømningstilstand). Sett bare fronten = -1 bare og bakre = -1 hvis deque består av ett element som for eksempel foran = bak. Tilordne verdien til fronten (foran = 0) hvis fronten er på slutten (foran = n - 1). Hvis ikke, sett fronten foran = foran+1.

Fjern bakfra

Trinn 1: Et element på slutten fjernes under prosessen. Forsikre deg om at deque ikke er tom.

Steg 2: Sletting er ikke mulig hvis deque er tom (foran = -1) (understrømningstilstand). Sett fronten = -1 og bakre = -1 Hvis deque bare har et enkelt element (foran = bak). Ellers fortsett med følgende trinn. La oss bevege oss mot fronten, bak = n - 1 hvis baksiden er foran (bak = 0). Hvis ikke, sett sjelden = sjelden-1.

Eksempel 1: Opprette deque

I dette eksemplet lager vi en deque. Vi inkluderer først overskriftsfilene våre "#include" og #include hvor #include kommanderer forbehandleren til å inkludere overskriftsfilen iostream og deque som inneholder alle programmets funksjoner.

#inkludere
#inkludere
ved hjelp av navneområdet STD;
void display_deque (deque);
int main ()
deque mydeque 4, 2, 7, 5, 8;
cout << "mydeque values are = ";
for (int var: mydeque)
cout << var << ", ";

return 0;

Etter det beskriver vi en skjerm _deque -funksjon som brukes til å utføre deque -verdiene som vi tildeler den.

Flytting inn i hovedfunksjonen vår, indikerer Int Main () at vår funksjon må returnere en heltallverdi ved slutten av utførelsen, som vi gjør ved å returnere 0 etter programmets konklusjon ved å bruke en enhetlig initialisering “Deque MyDeque 4, 2, 7, 7, 7, 7, 7, 7 , 5,8 ”. I denne "int" er datatypen av verdier som vi tildelte, og mydeque er navnet som vi brukte for vår Deque. Vi tildelte heltallverdiene til detque som heter MyDeque som er 4, 2, 7, 5, 8. For å vise vår deque, brukte vi for -loopen til en fast størrelse. Og så trykket vi på Run- eller F7 -knappen for å få utdataene fra programmet.

Eksempel 2: Legge til flere verdier til en deque

I dette eksemplet legger vi til flere verdier til en deque. Etter å ha lagt til de nødvendige overskriftsfilene for dette programmet, flytter vi inn i hovedfunksjonen til heltalldatatypen "Deque var 0, 1, 2". I denne "int" er datatypen av verdier som vi tildelte, og "var" er navnet som vi brukte for vår Deque. Vi tildeler heltallverdiene til deque som heter "var" som er 0, 1 og 2. Deretter skyver vi to elementer, element 8 foran av deque og element 5 på slutten av deque, ved hjelp av Push_front () og push_back () -funksjonene til deque. Så den resulterende deque som vi har er 8, 0, 1 og 5.

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()
deque var 0, 1, 2;
cout << "Initial Deque values are: ";
for (const int & var: var)
cout << var << ", ";

var.push_back (5);
var.push_front (8);
cout << "\nFinal Deque values are: ";
for (const int & var: var)
cout << var << ", ";

return 0;

Når vi er ferdige med kodingen av dette eksemplet, samler vi og utfører det i en hvilken som helst kompilator. Resultatet skildrer den forventede utdataene fra forrige kode.

Eksempel 3: Oppdatering av elementer i spesifiserte indekser

I dette eksemplet oppdaterer vi verdiene i en deque etter å ha inkludert overskriftsfilene våre “#include” og “#include” for denne kjørbare koden.

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()
deque var = 1, 2;
cout << "Initial Deque values are: ";
for (const int & var: var)
cout << var << ", ";

var.på (0) = 3;
var.ved (1) = 4;
cout << "\nUpdated Deque values are: ";
for (const int & var: var)
cout << var << ", ";

retur 0;

Nå går vi mot hovedfunksjonen vår der vi først initialiserte vår deque som heter "var" med verdier 1 og 2. Deretter bruker vi en for loop for å vise verdiene til vår initialiserte deque. For å oppdatere deque -verdiene bruker vi at () -funksjonen (som vi vet, at () -funksjonen brukes til å referere til den spesifiserte posisjonen i deque) ved indeks 0 og 1, og tilordne nye verdier til “var”. Disse er 3 og 4. Deretter er vår oppdaterte dequeue 3 og 4. Etter å ha gjort koden vår klar, sammenstiller vi den ved hjelp av et hvilket som helst kompilatorverktøy. Her er ønsket utgang av koden vår:

Eksempel 4: Bruke iterator for å fjerne verdiene

I dette eksemplet bruker vi iteratorene for å få tilgang til elementene i deque. Et objekt som peker på et element inne i en beholder kalles en iterator.

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()
deque var 0, 3, 5, 8;
Deque :: iterator var_iter;
var_iter = var.begynne();
int first_element = *var_iter;
cout << "var[0] = " << first_element << endl;
var_iter = var.begynn () + 1;
int element_index1 = *var_iter;
cout << "var[1] = " << element_index1 << endl;
var_iter = var.slutt () - 1;
int last_element = *var_iter;
cout << "var[2] = " << last_element;
retur 0;

Deque kan itereres både fremover og bakover ved bruk av deque :: cbegin og deque :: cend, og på begge måter ved å bruke deque :: crbegin og deque :: crend.

Til å begynne med opprettet vi en iterator som kan peke på et deque av heltall som heter ”var”. Deretter pekte vi på følgende elementer ved hjelp av "var_inter" iterator. Iteratoren som start () -metoden returnerer peker på det første elementet. "Begynn () + 1" genererer en iterator ved hjelp av elementets indeks 1 som utgangspunkt. Som du ser, bruker vi var.slutt () - 1 i stedet for var.slutt().

Dette er fordi iteratoren for slutten () -metoden lenker til en iterator som går forbi det siste elementet. For å få det siste elementet, trekker vi 1. Vi bruker indireksjonsoperatøren * for å oppnå verdien av et element etter å ha brukt inter_var for å peke på det.

Operasjoner av Deque

De grunnleggende operasjonene som kan utføres på Deque er som følger:

  • Insertfront brukes vanligvis til å legge til eller sette inn noe foran av deque.
  • Sett inn eller legg til noe på slutten av deque ved å bruke Insertlast kommando.
  • Deltefront brukes til å fjerne varen fra køens front ved å slette den.
  • Fjern finalen I dette skal varen slettes eller flyttes til slutten av køen.
  • Få det første elementet i deque ved å bruke GetFront metode.
  • Få den siste varen i køen ved å bruke getlast metode.
  • er tom brukes til å sjekke om deque er null.
  • er full brukes til å avgjøre om deque er full.

Konklusjon

Deque er det største alternativet fordi det er raskere og hjelper koden til å kjøre raskere. Deque fungerer bedre for loggsekvenser. Denne artikkelen er basert på deque implementering og dens viktigste metoder, som hjelper oss å endre deque i henhold til våre behov. Vi tar sikte på å forklare deque og dens metoder så vel som med eksempler på hvordan du bruker deque og når vi skal bruke den. Verktøyet som vi brukte til å implementere kode er C ++ -kompilatoren. Vi gjorde en oppriktig innsats for å gjøre denne opplæringen så enkel og så forståelig for deg som mulig.