Sto osservando l'implementazione di std::vector
in libC++ e ho notato che mantiene internamente tre puntatori (uno per l'inizio, uno alla fine e uno alla fine della memoria allocata) invece di quello che farei istintivamente , cioè un puntatore all'inizio e due membri size
e capacity
.Perché il libC++ std :: vector internamente mantiene tre puntatori invece di un puntatore e due dimensioni?
Ecco il codice da libca ++ <vector>
(ignorare la coppia compressa, so cosa significa).
pointer __begin_;
pointer __end_;
__compressed_pair<pointer, allocator_type> __end_cap_;
Ho notato che anche altre librerie standard fanno lo stesso (ad esempio Visual C++). Non vedo alcun motivo particolare per cui questa soluzione dovrebbe essere più veloce dell'altra, ma potrei sbagliarmi.
Quindi c'è una ragione particolare per cui la soluzione "tre puntatori" è preferita alla "puntatore + dimensioni"?
Suppongo che sia più conveniente per gli implementatori. – milleniumbug
Forse è meglio iniziare giustificando il motivo per cui preferiresti il tuo metodo? – tenfour
Sì, in tal caso, sto chiedendo perché (ad esempio il codice per la funzione xxxx è più semplice?) – gigabytes