std::vector<T,Allocator>::shrink_to_fit
void shrink_to_fit(); | (constexpr desde C++20) | |
Solicita la remoción de la capacidad sin usar.
Es una solicitud no vinculante para reducir la capacidad dada por capacity() a un tamaño dado size(). Depende de la implementación si se cumple la solicitud.
Si ocurre una reasignación de memoria, se invalidan todos los iteradores, incluyendo el iterador después del final y todas las referencias a los elementos. si no toma lugar ninguna reasignación de memoria, no se invalidan ni los iteradores ni las referencias.
Si | (desde C++11) |
Contenido |
[editar]Complejidad
A lo sumo lineal de acuerdo al tamaño del contenedor.
ExceptionsSi se lanza una excepción que no sea el constructor de movimiento de un tipo | (desde C++11) |
[editar]Notas
En libstdc++, shrink_to_fit()
no está disponible en modalidad C++98.
[editar]Ejemplo
#include <iostream>#include <vector> int main(){std::vector<int> v;std::cout<<"Capacidad construida por defecto es "<< v.capacity()<<'\n'; v.resize(100);std::cout<<"Capacidad de un vector de 100 elementos es "<< v.capacity()<<'\n'; v.resize(50);std::cout<<"Capacidad después de resize(50) es "<< v.capacity()<<'\n'; v.shrink_to_fit();std::cout<<"Capacidad después de shrink_to_fit() es "<< v.capacity()<<'\n'; v.clear();std::cout<<"Capacidad después de clear() es "<< v.capacity()<<'\n'; v.shrink_to_fit();std::cout<<"Capacidad después de shrink_to_fit() es "<< v.capacity()<<'\n';for(int i =1000; i <1300;++i) v.push_back(i);std::cout<<"Capacidad después de agregar 300 elementos es "<< v.capacity()<<'\n'; v.shrink_to_fit();std::cout<<"Capacidad después de shrink_to_fit() es "<< v.capacity()<<'\n';}
Posible salida:
Capacidad construida por defecto es 0 Capacidad de un vector de 100 elementos es 100 Capacidad después de resize(50) es 100 Capacidad después de shrink_to_fit() es 50 Capacidad después de clear() es 50 Capacidad después de shrink_to_fit() es 0 Capacidad después de agregar 300 elementos es 512 Capacidad después de shrink_to_fit() es 300
[editar]Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
---|---|---|---|
LWG 755 | C++98 | std::vector carecía de operaciones explícitas de reducción para ajustar. | Se proporcionaron. |
LWG 2033 | C++98 C++11 | 1. Faltaba el requisito de complejidad (C++98) 2. No se requería que T fuera InsertablePorMovimiento (C++11) | 1. Se agregó. 2. Se requiere. |
LWG 2223 | C++98 C++11 | 1. Las referencias, punteros e iteradores no se invalidaban (C++98) 2. No había garantía de seguridad de excepciones (C++11) | 1. Pueden invalidarse. 2. Se agregó. |
[editar]Véase también
Devuelve el número de elementos. (función miembro pública) | |
Devuelve el número de elementos que se pueden almacenar en el almacenamiento asignado actualmente. (función miembro pública) |