std::basic_string<CharT,Traits,Allocator>::resize
Von cppreference.com
< cpp | string | basic string
void resize( size_type count ); |
(1) | (constexpr seit C++20) |
void resize( size_type count, CharT ch ); |
(2) | (constexpr seit C++20) |
Ändert die Größe des Strings auf count Zeichen.
Wenn die aktuelle Größe kleiner als count ist, werden zusätzliche Zeichen angehängt
1) Initialisiert angehängte Zeichen mit CharT() ('\0' wenn
CharT char ist).2) Initialisiert angehängte Zeichen mit ch.
Wenn die aktuelle Größe größer als count ist, wird der String auf seine ersten count Elemente reduziert.
Inhalt |
[bearbeiten] Parameter
| zählt | - | neue Größe des Strings |
| ch | - | Zeichen, mit dem die neuen Zeichen initialisiert werden sollen |
[bearbeiten] Ausnahmen
std::length_error wenn count > max_size() true ist. Jegliche Ausnahmen, die vom entsprechenden Allocator geworfen werden.
Wenn aus irgendeinem Grund eine Ausnahme ausgelöst wird, hat diese Funktion keine Auswirkungen (starkes Ausnahmesicherheitsgarantie).
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <iomanip> #include <iostream> #include <stdexcept> int main() { const unsigned desired_length{8}; std::string long_string("Where is the end?"); std::string short_string("H"); std::cout << "Basic functionality:\n" << "Shorten:\n" << "1. Before: " << std::quoted(long_string) << '\n'; long_string.resize(desired_length); std::cout << "2. After: " << std::quoted(long_string) << '\n'; std::cout << "Lengthen with a given value 'a':\n" << "3. Before: " << std::quoted(short_string) << '\n'; short_string.resize(desired_length, 'a'); std::cout << "4. After: " << std::quoted(short_string) << '\n'; std::cout << "Lengthen with char() == " << static_cast<int>(char()) << '\n' << "5. Before: " << std::quoted(short_string) << '\n'; short_string.resize(desired_length + 3); std::cout << "6. After: \""; for (char c : short_string) std::cout << (c == char() ? '@' : c); std::cout << "\"\n\n"; std::cout << "Errors:\n"; std::string s; try { // size is OK, no length_error // (may throw bad_alloc) s.resize(s.max_size() - 1, 'x'); } catch (const std::bad_alloc& ex) { std::cout << "1. Exception: " << ex.what() << '\n'; } try { // size is OK, no length_error // (may throw bad_alloc) s.resize(s.max_size(), 'x'); } catch (const std::bad_alloc& ex) { std::cout << "2. Exception: " << ex.what() << '\n'; } try { // size is BAD, throw length_error s.resize(s.max_size() + 1, 'x'); } catch (const std::length_error& ex) { std::cout << "3. Length error: " << ex.what() << '\n'; } }
Mögliche Ausgabe
Basic functionality: Shorten: 1. Before: "Where is the end?" 2. After: "Where is" Lengthen with a given value 'a': 3. Before: "H" 4. After: "Haaaaaaa" Lengthen with char() == 0 5. Before: "Haaaaaaa" 6. After: "Haaaaaaa@@@" Errors: 1. Exception: std::bad_alloc 2. Exception: std::bad_alloc 3. Length error: basic_string::_M_replace_aux
[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 |
| LWG 2250 | C++98 | Das Verhalten war undefiniert, wenn count > max_size() ist true |
wirft in diesem Fall immer eine Ausnahme |
[bearbeiten] Siehe auch
| gibt die Anzahl der Zeichen zurück (public member function) | |
| reserviert Speicher (public member function) | |
| (DR*) |
reduziert den Speicherverbrauch durch Freigabe von ungenutztem Speicher (öffentliche Member-Funktion) |