Namespaces
Variants

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

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

Fordert die Entfernung ungenutzter Kapazität an.

Es ist eine unverbindliche Aufforderung, die capacity() auf size() zu reduzieren. Es hängt von der Implementierung ab, ob die Aufforderung erfüllt wird.

Wenn (und nur wenn) eine Neuverteilung stattfindet, werden alle Zeiger, Referenzen und Iteratoren ungültig.

Inhaltsverzeichnis

Komplexität

Linear in der Größe der Zeichenkette.

Hinweise

In libstdc++, shrink_to_fit() ist nicht verfügbar im C++98-Modus.

Beispiel

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

Mögliche Ausgabe:

GCC-Ausgabe:
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
clang-Ausgabe (mit -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

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 755 C++98 std::string fehlten explizite Shrink-to-Fit-Operationen bereitgestellt
LWG 2223 C++98 1. Referenzen, Zeiger und Iteratoren wurden nicht ungültig
2. es gab keine Komplexitätsanforderung
1. sie können ungültig werden
2. muss linear sein

Siehe auch

gibt die Anzahl der Zeichen zurück
(öffentliche Elementfunktion)
gibt die Anzahl der Zeichen zurück, die im aktuell allokierten Speicherplatz gehalten werden können
(öffentliche Elementfunktion)
ändert die Anzahl der gespeicherten Zeichen
(öffentliche Elementfunktion)