Namespaces
Variants

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

From cppreference.net
std::basic_string
void shrink_to_fit ( ) ;
(constexpr depuis C++20)

Demande la suppression de la capacité inutilisée.

Il s'agit d'une requête non-contraignante pour réduire la capacity() à la size() . L'implémentation détermine si cette requête est satisfaite.

Si (et seulement si) une réallocation a lieu, tous les pointeurs, références et itérateurs sont invalidés.

Table des matières

Complexité

Linéaire dans la taille de la chaîne.

Notes

Dans libstdc++, shrink_to_fit() est non disponible en mode C++98.

Exemple

#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';
}

Sortie possible :

Sortie 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
Sortie clang (avec -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

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement tel que publié Comportement correct
LWG 755 C++98 std::string manquait d'opérations explicites de réduction de capacité fourni
LWG 2223 C++98 1. les références, pointeurs et itérateurs n'étaient pas invalidés
2. il n'y avait pas d'exigence de complexité
1. ils peuvent être invalidés
2. doit être linéaire

Voir aussi

renvoie le nombre de caractères
(fonction membre publique)
renvoie le nombre de caractères pouvant être stockés dans la mémoire actuellement allouée
(fonction membre publique)
modifie le nombre de caractères stockés
(fonction membre publique)