ho imparato la complessità del deque::insert()
dallo standard 2003 (capitolo 23.2.1.3) C++ come segue:Complessità del STL deque :: insert()
Nel peggiore dei casi, l'inserimento di un singolo elemento in un deque richiede tempo lineare nel minimo della distanza dal punto di inserimento all'inizio della deque e la distanza dal punto di inserimento alla fine della deque.
Ho sempre compreso l'implementazione di stl deque come una raccolta di blocchi di memoria. Quindi un inserimento interesserà solo gli elementi nello stesso blocco di memoria della posizione di inserimento. La mia domanda è: cosa significa lo standard per "lineare nel minimo della distanza dal punto di inserimento all'inizio della deque e la distanza dal punto di inserimento alla fine della deque"?
La mia comprensione è perché lo standard C++ non applica una determinata implementazione di deque. La complessità è solo in generale per il caso peggiore. Tuttavia, nell'attuale implementazione nei compilatori, è lineare rispetto al numero di elementi in un blocco di memoria, che può variare a seconda delle dimensioni degli elementi.
Un'altra ipotesi potrebbe essere che, dal momento che insert()
invaliderà tutti gli iteratori, deque deve aggiornare tutti gli iteratori. Quindi è lineare.
Nel peggiore dei casi sarà O (n/2) – Pubby