Espacios de nombres
Variantes

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

De cppreference.com
 
 
 
 
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)

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)

Notas

En libstdc++, shrink_to_fit() no está disponible en modalidad C++98.


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

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ó.

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]