Implementazione di deque in C ++ con un array

2

Come è implementata la funzione end() in deque-STL di C ++ con array?

Secondo le mie conoscenze, restituisce l'elemento passato-fine. Ma quando un ciclo viene eseguito come, for(i=deq.begin();i!=deq.end();i++) e l'intero array è pieno (supponiamo size = 4), allora penso che end() punterà alla posizione in cui begin() sta puntando, in questo modo non andrà nel ciclo for.

Come risolvere questo problema?

    
posta ganeshwani 02.02.2014 - 07:42
fonte

1 risposta

3

Sembra che tu stia confondendo un deque (coda a doppio attacco) con un buffer circolare.

In un buffer circolare hai ragione che quando il buffer è pieno, l'elemento "uno passato l'ultimo" coincide con il primo elemento. Quando si implementano gli iteratori per un buffer circolare, questo deve essere preso in considerazione per evitare di confondere un buffer vuoto con uno completamente riempito.

Una deque può essere meglio visualizzata come una fila di elementi in cui è possibile aggiungere elementi alle due estremità. Questo dovrebbe anche chiarire che non c'è modo per end() di essere uguale a begin() eccetto che per una coda vuota, perché non vi è alcun punto in cui le due estremità si incontrano di nuovo.

    
risposta data 02.02.2014 - 10:58
fonte

Leggi altre domande sui tag