Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
void shrink_to_fit();
(constexpr seit C++20)

Fordert die Entfernung von ungenutztem Speicherplatz an.

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

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

Inhalt

[bearbeiten] Komplexität

Linear zur Größe des Strings.

[bearbeiten] Hinweise

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

[bearbeiten] 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 output:
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 output (with -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

[bearbeiten] Defect reports

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

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes 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 gemacht
2. Es gab keine Anforderung an die Komplexität
1. Sie können ungültig gemacht werden
2. Müssen linear sein

[bearbeiten] Siehe auch

gibt die Anzahl der Zeichen zurück
(public member function) [edit]
gibt die Anzahl der Zeichen zurück, die im aktuell zugewiesenen Speicher gehalten werden können
(public member function) [edit]
ändert die Anzahl der gespeicherten Zeichen
(public member function) [edit]