Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>:: shrink_to_fit

From cppreference.net
std::basic_string
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 cumplida.

Si (y solo si) tiene lugar una relocalización, todos los punteros, referencias e iteradores quedan invalidados.

Contenidos

Complejidad

Lineal en el tamaño de la cadena.

Notas

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

Ejemplo

#include <iostream>
#include <string>
int main()
{
    std::string s;
    std::cout << "Size of std::string is " << sizeof s << " bytes\n"
        << "Default-constructed capacity is " << s.capacity() 
        << " and size is " << s.size() << '\n';
    for (int i = 0; i < 42; i++)
        s.append(" 42 ");
    std::cout << "Capacity after 42 appends is " << s.capacity() 
        << " and size is " << s.size() << '\n';
    s.clear();
    std::cout << "Capacity after clear() is " << s.capacity() 
        << " and size is " << s.size() << '\n';
    s.shrink_to_fit();
    std::cout << "Capacity after shrink_to_fit() is " << s.capacity() 
        << " and size is " << s.size() << '\n';
}

Salida posible:

Salida GCC:
Size of std::string is 32 bytes
Default-constructed capacity is 15 and size 0
Capacity after 42 appends is 240 and size 168
Capacity after clear() is 240 and size 0
Capacity after shrink_to_fit() is 15 and size 0
Salida clang (con -stdlib=libc++):
Size of std::string is 24 bytes
Default-constructed capacity is 22 and size is 0
Capacity after 42 appends is 191 and size is 168
Capacity after clear() is 191 and size is 0
Capacity after shrink_to_fit() is 22 and size is 0

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::string carecía de operaciones explícitas de reducción de capacidad proporcionado
LWG 2223 C++98 1. las referencias, punteros e iteradores no se invalidaban
2. no había requisito de complejidad
1. pueden invalidarse
2. debe ser lineal

Véase también

devuelve el número de caracteres
(función miembro pública)
devuelve el número de caracteres que pueden almacenarse en el almacenamiento actualmente asignado
(función miembro pública)
cambia el número de caracteres almacenados
(función miembro pública)