Vorrei ridimensionare un std::vector
, per ridurne la capacità alle sue dimensioni esatte, in modo che la memoria aggiuntiva venga liberata. Il trucco di serie sembra essere quella descritta here:Come ridimensionare un vettore std :: in modo efficiente per la memoria?
template< typename T, class Allocator >
void shrink_capacity(std::vector<T,Allocator>& v)
{
std::vector<T,Allocator>(v.begin(),v.end()).swap(v);
}
Il punto di shrink-to-fit è quello di salvare la memoria, ma non questo metodo prima creare una copia completa e poi scambia le istanze? Quindi ad un certo punto - quando la copia è costruita - l'utilizzo della memoria è raddoppiato?
In tal caso, esiste un metodo di restringimento per adattarsi alla memoria? (Nel mio caso il vettore è davvero grande e non posso permettermi di avere in memoria sia l'originale che una copia in memoria.)
Duplicato ?: http://stackoverflow.com/questions/1111078/reduce-the-capacity-of-an-stl-vector – ergosys
Non proprio, vuole impedire la copia temporanea di entrambi gli elementi in memoria allo stesso tempo durante lo swap. –
In realtà, questo è anche l'altro (evitando la copia). Grazie per il link. – Frank