Er det noen POP_FRONT -metode i C ++ STDVector?

Er det noen POP_FRONT -metode i C ++ STDVector?
Et programmeringsspråk på høyt nivå kalt C ++ kan støtte et bredt spekter av datastrukturer, inkludert vektorer. En vektor er et dynamisk utvalg av tilstøtende minneelementer som har en forhåndsbestemt maksimal størrelse. Det er en fleksibel og praktisk beholder i C ++ som gir effektiv minnestyring og fleksibel tildeling. Et av de ofte stilte spørsmålene blant C ++ -programmerere er om det er en POP_FRONT Metode i std :: vektor. La oss finne det ut:

Er det noen POP_FRONT -metode i C ++ std :: vektor?

Nei er det raske svaret på denne spørringen. Vektorer har ikke en innebygd POP_FRONT-metode i C ++ Standard Library, i motsetning til andre containerklasser som Deque og List. Det grunnleggende designprinsippet for vektorer, som fremmer rask tilfeldig tilgang til elementer, er årsaken til dette fraværet. Fjerning av det første elementet nødvendiggjør et skifte av alle etterfølgende komponenter siden vektorer lagrer elementene sine i en sammenhengende minneblokk.

Det er viktig å se nærmere på pop_back For å få hvorfor POP_FRONT er utilgjengelig i std :: vektor. En vanlig vektormetode kalt pop_back eliminerer den endelige komponenten i beholderen. Dette oppnås ved å utføre destruktøren til medlemmet som ble fjernet og senke vektorens størrelse med en. Når vektorer utvides fra ryggen, er eliminering av den endelige komponenten en enkel operasjon som ikke innebærer å flytte andre elementer. Likevel vil eliminering av det opprinnelige elementet føre til at alle påfølgende komponenter flytter ett rom til venstre. Siden denne prosedyren kopierer hvert vektorelement, er den utrolig ineffektiv, spesielt for store vektorer. De POP_FRONT er derfor ekskludert fra std :: vektor for å forhindre at vektoroperasjoner blir bremset ned.

Alternativer av POP_FRONT -metoden i C++

Det er mange måter å fjerne komponenter fra fronten på en vektor til tross for mangelen på en POP_FRONT metode.

1: Slette metode

En teknikk er å bruke slette metoden På vektorens første element. De slette metoden Endrer de gjenværende komponentene for å gjenspeile fjerning av et element eller et sett med elementer fra vektoren. Dermed kan vi bruke følgende kodelinje i C ++ for å oppnå samme oppførsel som POP_FRONT:

#inkludere
#inkludere
mal
void pop_front (std :: vektor & v)

if (v.størrelse ()> 0)
v.Sletting (v.begynne());


int main ()

std :: vektor nums = 5,6,7,8,9;
POP_FRONT (NUMS);
for (int i: nums)
std :: cout << i << ";

retur 0;

I koden ovenfor bruker vi viske ut() funksjon som et alternativ til POP_FRONT () for å fjerne det første elementet i en vektorinitialisert. Vi har definert en funksjon som heter POP_FRONT (), Og i funksjonen bruker vi begynne() og viske ut() funksjoner for å fjerne det første elementet i vektoren.

Produksjon

2: Deque Method

En annen beholder i C ++ standardbiblioteket er deque, som gir muligheten til en dynamisk matrise-lignende beholder med den ekstra muligheten til å legge til og fjerne elementer fra både fronten og bak. Bruker en Deque (dobbel-sluttkø) i stedet for en vektor er en ekstra erstatning for POP_FRONT. Så vi kan bruke den til å oppnå samme oppførsel som POP_FRONT:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

Deque mydeque;
mydeque.push_front (4);
mydeque.push_front (5);
mydeque.push_front (6);
mydeque.pop_front ();
for (auto it = mydeque.begynne(); den != mydeque.slutt(); ++ det)
cout << " << *it;

I koden ovenfor bruker vi en push_front () funksjon for å skyve verdiene i en deque, og en POP_FRONT () funksjon for å fjerne det første elementet fra deque.

Produksjon

Konklusjon

På grunn av dens interne minnestruktur og designprinsipper, std :: vektor I C ++ har ikke en POP_FRONT metode. Det er imidlertid flere ekstra teknikker, for eksempel bruk av Deque og viske ut Metoder som kan brukes til å fjerne elementer fra fronten av beholderen. Når du velger den beste tilnærmingen for implementeringen, må programmerere gå på akkord mellom bekvemmelighet og effektivitet.