Me gustaría 'encoger para ajustar' un std::vector
, para reducir su capacidad a su tamaño exacto, de modo que se libere memoria adicional. El truco estándar parece ser el que se describe here:¿Cómo encoger y ajustar un std :: vector de una manera eficiente con 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);
}
El punto entero de contracción para el montaje es para ahorrar memoria, pero no este método primero crear una copia profunda y luego intercambia los casos? Entonces, en algún momento, cuando se construye la copia, ¿el uso de la memoria se duplica?
Si ese es el caso, ¿hay un método más fácil de ajustar la memoria para reducir el tamaño? (En mi caso, el vector es muy grande y no puedo permitirme tener tanto el original como una copia en memoria en cualquier momento.)
¿Duplicado ?: http://stackoverflow.com/questions/1111078/reduce-the-capacity-of-an-stl-vector – ergosys
En realidad, no quiere evitar la copia temporal de ambos elementos en la memoria al mismo tiempo mientras se produce el intercambio. –
En realidad, de eso se trata la otra pregunta (evitar la copia). Gracias por el enlace. – Frank