remove item how from first delete data c++ stl vector

c++ - item - ¿Una llamada a std:: vector:: clear() establecerá std:: vector:: capacity() en cero?



std:: vector remove element (5)

Si utilizo .reserve (elementos) en un vector, el vector asignará suficiente memoria para mi conjetura de la cantidad de elementos que necesitaré.

Si más tarde uso .clear (), ¿eso borrará el vector o guardará mi reserva definida anteriormente?

Gracias.


No afectará el tamaño del búfer subyacente. Por eso tienes que usar trucos como this para deshacerte del buffer o hacerlo más pequeño.


No, no establecerá reserve () en 0. Llamar a clear () llama a los destructores de cada elemento y los elimina del vector, dejando el contenedor con tamaño de 0, pero la capacidad permanece sin cambios.


No, no lo hará. Pruébelo llamando a vector::capacity() .

Otra evidencia de esto es la apariencia de shrink_to_fit . El borrador de trabajo de la norma menciona:

Observaciones: shrink_to_fit es una solicitud no vinculante para reducir la capacidad () al tamaño (). [Nota: la solicitud no es vinculante para permitir la flexibilidad de las optimizaciones específicas de la implementación . -finalizar nota]


Probablemente no liberará la memoria reservada, aunque no creo que el comportamiento esté especificado en el estándar.

EDITAR: Ok, acabo de comprobar y el estándar solo dice que la condición posterior es ese size() == 0 aunque no he encontrado una implementación vector que no se aferre a la memoria reservada.


Se especifica que std::vector<T>::clear() afecta el tamaño. Puede que no afecte la capacidad. Para restablecer la capacidad, use el truco de intercambio :

std::vector<int> v1; // somehow increase capacity std::vector<int>().swap(v1);

Nota: Dado que esta vieja respuesta sigue recibiendo upvotes (así la gente lo lee), siento la necesidad de agregar que C ++ 11 ha agregado std::vector<...>::shrink_to_fit() , que solicita que el vector eliminar la capacidad no utilizada.