std::basic_string<CharT,Traits,Allocator>::reserve
void reserve( size_type new_cap = 0 );
|
(1) | (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) |
std::basic_string-Objekt über eine geplante Größenänderung, damit es die Speicherzuweisung entsprechend verwalten kann.
- Wenn
new_capgrößer als die aktuelle capacity() ist, wird neuer Speicher zugewiesen und capacity() wird gleich oder größer alsnew_capgemacht.
|
(bis C++20) |
|
(seit C++20) |
Parameter
| new_cap | - | neue Kapazität des Strings |
Rückgabewert
(keine)
Ausnahmen
Wirft std::length_error falls new_cap größer ist als max_size() .
Kann alle Ausnahmen werfen, die von std:: allocator_traits < Allocator > :: allocate ( ) geworfen werden, wie z.B. std::bad_alloc .
Wenn aus irgendeinem Grund eine Exception ausgelöst wird, hat diese Funktion keine Wirkung ( strong exception safety guarantee ).
Komplexität
Höchstens linear in der size() der Zeichenkette.
Beispiel
#include <cassert> #include <iostream> #include <string> int main() { std::string s; std::cout << "1) Anfänglich: " << s.capacity() << '\n'; const std::string::size_type new_cap{101u}; s.reserve(new_cap); assert(s.capacity() >= new_cap); std::cout << "2) Nach reserve(" << new_cap << "): " << s.capacity() << '\n'; // Beobachtung des Kapazitätswachstumsfaktors auto cap{s.capacity()}; for (int check{}; check != 4; ++check) { while (cap == s.capacity()) s += '$'; cap = s.capacity(); std::cout << (3) + check << ") Kapazität: " << cap << '\n'; } // s.reserve(); // In C++20/26 veraltet/entfernt, verwenden Sie: s.shrink_to_fit(); std::cout << "7) Nach shrink_to_fit: " << s.capacity() << '\n'; }
Mögliche Ausgabe:
1) Anfänglich: 15 2) Nach reserve(101): 101 3) Kapazität: 202 4) Kapazität: 404 5) Kapazität: 808 6) Kapazität: 1616 7) Nach shrink_to_fit: 809
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 847 | C++98 | es gab keine Exception-Sicherheitsgarantie | starke Exception-Sicherheitsgarantie hinzugefügt |
Siehe auch
|
gibt die Anzahl der Zeichen zurück, die im aktuell allozierten Speicherplatz gespeichert werden können
(öffentliche Elementfunktion) |
|
|
ändert die Anzahl der gespeicherten Zeichen
(öffentliche Elementfunktion) |