Espacios de nombres
Variantes
Acciones

std::vector<T,Allocator>::shrink_to_fit

De cppreference.com
< cpp‎ | container‎ | vector
 
 
 
 
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 T no es InsertablePorMovimiento en std::vector<T, Allocator>, el comportamiento no está definido.

(desde C++11)

Contenido

[editar]Complejidad

A lo sumo lineal de acuerdo al tamaño del contenedor.

Exceptions

Si se lanza una excepción que no sea el constructor de movimiento de un tipo T que no sea InsertablePorCopia, no hay efectos.

(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)[editar]
Devuelve el número de elementos que se pueden almacenar en el almacenamiento asignado actualmente.
(función miembro pública)[editar]
close