Quindi, se prima riservo (100), aggiungo alcuni elementi e poi ridimensiono (0) (o qualsiasi altro numero più piccolo della dimensione corrente), il vettore rialloca la memoria a uno spazio inferiore a 100 elementi?Ridimensiona() ad una dimensione minore scartare la prenotazione effettuata da reserve precedente()?
Q
Ridimensiona() ad una dimensione minore scartare la prenotazione effettuata da reserve precedente()?
6
A
risposta
6
vector<T>::resize(0)
non dovrebbe causare una riallocazione o cancellazione della memoria allocata, e per questo motivo nella maggior parte dei casi è preferibile a vector<T>::clear()
.
Per ulteriori dettagli consultare le risposte a questa domanda: std::vector resize downward
2
Facendo un vector::resize(0)
o per un conteggio più piccolo piuttosto che di conteggio attuale non dovrebbe rilasciare alcuna memoria. Tuttavia, potrebbe distruggere questi elementi.
Per un riferimento sui std::vector::resize
, dare un'occhiata a std::vector::resize
'clear' non provoca una ridistribuzione o, in modo non vedo il motivo per cui sarebbe preferibile ... – ildjarn
ho visto almeno un'implementazione dove 'clear' ha liberato la memoria. –
@ MarkB: Non dovrebbe avere. : P – GManNickG