std::basic_string<CharT,Traits,Allocator>::reserve
Von cppreference.com
< cpp | string | basic string
| (1) | ||
void reserve( size_type new_cap = 0 ); |
(bis C++20) | |
| constexpr void reserve( size_type new_cap ); |
(seit C++20) | |
| void reserve(); |
(2) | (seit C++20) (veraltet in C++20) (entfernt in C++26) |
1) Informiert ein
std::basic_string-Objekt über eine geplante Größenänderung, damit es den Speicherplatz entsprechend verwalten kann.- Wenn new_cap größer als die aktuelle capacity() ist, wird neuer Speicher zugewiesen und capacity() wird gleich oder größer als new_cap gemacht.
|
(bis C++20) |
|
(seit C++20) |
Wenn eine Kapazitätsänderung stattfindet, werden alle Iteratoren und Referenzen, einschließlich des Past-the-End-Iterators, ungültig.
2) Eine nicht bindende Anfrage zur Verkleinerung auf die aktuelle Größe. Nach diesem Aufruf hat capacity() einen nicht spezifizierten Wert, der größer oder gleich size() ist.
Inhalt |
[bearbeiten] Parameter
| new_cap | - | neue Kapazität des Strings |
[bearbeiten] Rückgabewert
(keine)
[bearbeiten] Ausnahmen
Löst std::length_error aus, wenn new_cap größer als max_size() ist.
Kann Ausnahmen auslösen, die von std::allocator_traits<Allocator>::allocate() ausgelöst werden, wie z. B. std::bad_alloc.
Wenn aus irgendeinem Grund eine Ausnahme ausgelöst wird, hat diese Funktion keine Auswirkungen (starkes Ausnahmesicherheitsgarantie).
[bearbeiten] Komplexität
Höchstens linear in der size() des Strings.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <cassert> #include <iostream> #include <string> int main() { std::string s; std::cout << "1) Initially: " << s.capacity() << '\n'; const std::string::size_type new_cap{101u}; s.reserve(new_cap); assert(s.capacity() >= new_cap); std::cout << "2) After reserve(" << new_cap << "): " << s.capacity() << '\n'; // observing the capacity growth factor auto cap{s.capacity()}; for (int check{}; check != 4; ++check) { while (cap == s.capacity()) s += '$'; cap = s.capacity(); std::cout << (3) + check << ") Capacity: " << cap << '\n'; } // s.reserve(); // deprecated/removed in C++20/26, use: s.shrink_to_fit(); std::cout << "7) After shrink_to_fit: " << s.capacity() << '\n'; }
Mögliche Ausgabe
1) Initially: 15 2) After reserve(101): 101 3) Capacity: 202 4) Capacity: 404 5) Capacity: 808 6) Capacity: 1616 7) After shrink_to_fit: 809
[bearbeiten] Fehlerberichte
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 847 | C++98 | Es gab keine Ausnahmesicherheitsgarantie | starke Ausnahmesicherheitsgarantie hinzugefügt |
[bearbeiten] Siehe auch
| 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) |