std::vector<T,Allocator>:: shrink_to_fit
|
void
shrink_to_fit
(
)
;
|
(constexpr desde C++20) | |
Solicita la eliminación de capacidad no utilizada.
Es una solicitud no vinculante para reducir capacity() a size() . Depende de la implementación si la solicitud es atendida.
Si ocurre una reasignación de memoria, todos los iteradores (incluyendo el
end()
iterator) y todas las referencias a los elementos quedan invalidados. Si no ocurre reasignación de memoria, ningún iterador o referencia queda invalidado.
|
Si
|
(desde C++11) |
Contenidos |
Complejidad
Como máximo lineal en el tamaño del contenedor.
Excepciones
Si se lanza una excepción que no sea por el constructor de movimiento de un
CopyInsertable
|
(desde C++11) |
Notas
En libstdc++,
shrink_to_fit()
está
no disponible
en modo C++98.
Ejemplo
#include <iostream> #include <vector> int main() { std::vector<int> v; std::cout << "Default-constructed capacity is " << v.capacity() << '\n'; v.resize(100); std::cout << "Capacity of a 100-element vector is " << v.capacity() << '\n'; v.resize(50); std::cout << "Capacity after resize(50) is " << v.capacity() << '\n'; v.shrink_to_fit(); std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n'; v.clear(); std::cout << "Capacity after clear() is " << v.capacity() << '\n'; v.shrink_to_fit(); std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n'; for (int i = 1000; i < 1300; ++i) v.push_back(i); std::cout << "Capacity after adding 300 elements is " << v.capacity() << '\n'; v.shrink_to_fit(); std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n'; }
Salida posible:
Default-constructed capacity is 0 Capacity of a 100-element vector is 100 Capacity after resize(50) is 100 Capacity after shrink_to_fit() is 50 Capacity after clear() is 50 Capacity after shrink_to_fit() is 0 Capacity after adding 300 elements is 512 Capacity after shrink_to_fit() is 300
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 755 | C++98 |
std::vector
carecía de operaciones explícitas de reducción de capacidad
|
proporcionado |
| LWG 2033 |
C++98
C++11 |
1. faltaba el requisito de complejidad (C++98)
2.
T
no requería ser
MoveInsertable
(C++11)
|
1. añadido
2. requerido |
| LWG 2223 |
C++98
C++11 |
1. referencias, punteros e iteradores no se invalidaban (C++98)
2. no existía garantía de seguridad de excepciones (C++11) |
1. pueden invalidarse
2. añadida |
Véase también
|
devuelve el número de elementos
(función miembro pública) |
|
|
devuelve el número de elementos que pueden almacenarse en la memoria actualmente asignada
(función miembro pública) |