std::basic_string<CharT,Traits,Allocator>::shrink_to_fit
Von cppreference.com
< cpp | string | 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
Führen Sie diesen Code aus
#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) | |
| gibt die Anzahl der Zeichen zurück, die im aktuell zugewiesenen Speicher gehalten werden können (public member function) | |
| ändert die Anzahl der gespeicherten Zeichen (public member function) |