C'è qualche metodo pop_front in c ++ std :: vector?
NO è la risposta rapida a questa domanda. I vettori non hanno un metodo pop_front incorporato nella libreria standard C ++, a differenza di altre classi di container come Deque ed Elenco. Il principio di progettazione fondamentale dei vettori, che promuove un rapido accesso casuale agli elementi, è la causa di questa assenza. La rimozione del primo elemento richiede uno spostamento di tutti i componenti successivi poiché i vettori memorizzano i loro elementi in un blocco di memoria contiguo.
È essenziale esaminare pop_back Per ottenere perché pop_front non è disponibile in std :: vector. Un metodo vettoriale comune chiamato pop_back Elimina il componente finale del contenitore. Ciò si ottiene eseguendo il distruttore del membro che è stato rimosso e abbassando le dimensioni del vettore di uno. Man mano che i vettori si espandono dalla loro schiena, eliminare il componente finale è una semplice operazione che non comporta il trasferimento di altri elementi. Tuttavia, eliminare l'elemento iniziale causerebbe la mossa a sinistra di tutti i componenti successivi. Poiché questa procedura copia ogni elemento vettoriale, è incredibilmente inefficiente, specialmente per i grandi vettori. IL pop_front è quindi escluso da std :: vector al fine di evitare che le operazioni vettoriali vengano rallentate.
Alternative del metodo pop_front in c++
Esistono numerosi modi per rimuovere i componenti dalla parte anteriore di un vettore nonostante la mancanza di un pop_front metodo.
1: Cancella metodo
Una tecnica è utilizzare il Cancella metodo Sull'elemento iniziale del vettore. IL Cancella metodo Modifica i componenti rimanenti per riflettere la rimozione di un elemento o un insieme di elementi dal vettore. Pertanto, possiamo usare la seguente riga di codice in C ++ per ottenere lo stesso comportamento di pop_front:
#includere
#includere
modello
void pop_front (std :: vector& v)
Se (v.size ()> 0)
v.Cancella (v.inizio());
int main ()
Std :: Vectornums = 5,6,7,8,9;
pop_front (nums);
per (int i: nums)
std :: cout << i << ";
restituzione 0;
Nel codice sopra, stiamo usando il cancellare() Funzionare come alternativa di pop_front () Per rimuovere il primo elemento di un vettore inizializzato. Abbiamo definito una funzione denominata pop_front (), E nella funzione, stiamo usando il inizio() E cancellare() funzioni per rimuovere il primo elemento del vettore.
Produzione
2: Metodo Deque
Un altro contenitore nella libreria standard C ++ è il Deque, che offre la capacità di un contenitore dinamico simile a un array con la capacità aggiuntiva di aggiungere e rimuovere elementi sia dalla parte anteriore che dalla parte posteriore. Usare un Deque (coda a doppia estremità) al posto di un vettore è un sostituto aggiuntivo per pop_front. Quindi, possiamo usarlo per ottenere lo stesso comportamento di pop_front:
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()
Dequemydeque;
mydeque.push_front (4);
mydeque.push_front (5);
mydeque.push_front (6);
mydeque.pop_front ();
per (auto it = mydeque.inizio(); Esso != mydeque.FINE(); ++ esso)
cout << " << *it;
Nel codice sopra, stiamo usando un file push_front () funzione per spingere i valori in un deque e a pop_front () funzione per rimuovere il primo elemento dal deque.
Produzione
Conclusione
A causa della sua struttura di memoria interna e dei principi di progettazione, Std :: Vector in C ++ non ha un pop_front metodo. Vi sono, tuttavia, diverse tecniche aggiuntive, come l'uso di Deque E cancellare Metodi che possono essere utilizzati per rimuovere gli elementi dalla parte anteriore del contenitore. Quando si selezionano l'approccio migliore per la loro implementazione, i programmatori devono scendere a compromessi tra convenienza ed efficienza.