Namespaces
Variants

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

From cppreference.net

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 T no es MoveInsertable en std:: vector < T, Allocator > , el comportamiento es indefinido.

(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 T no- , no hay efectos.

(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)