std::basic_string<CharT,Traits,Allocator>::resize - cppreference.com (original) (raw)
| void resize( size_type count ); | (1) | (constexpr since C++20) |
|---|---|---|
| void resize( size_type count, CharT ch ); | (2) | (constexpr since C++20) |
Resizes the string to contain count characters.
If the current size is less than count, additional characters are appended:
Initializes appended characters to CharT() ('\0' if
CharTis char).Initializes appended characters to ch.
If the current size is greater than count, the string is reduced to its first count elements.
[edit] Parameters
| count | - | new size of the string |
|---|---|---|
| ch | - | character to initialize the new characters with |
[edit] Exceptions
std::length_error if count > max_size() is true. Any exceptions thrown by corresponding Allocator.
If an exception is thrown for any reason, this function has no effect (strong exception safety guarantee).
[edit] Example
#include #include #include 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(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'; } }
Possible output:
Basic functionality: Shorten:
- Before: "Where is the end?"
- After: "Where is" Lengthen with a given value 'a':
- Before: "H"
- After: "Haaaaaaa" Lengthen with char() == 0
- Before: "Haaaaaaa"
- After: "Haaaaaaa@@@"
Errors:
- Exception: std::bad_alloc
- Exception: std::bad_alloc
- Length error: basic_string::_M_replace_aux
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 847 | C++98 | there was no exception safety guarantee | added strong exception safety guarantee |
| LWG 2250 | C++98 | the behavior was undefined ifcount > max_size() is true | always throws an exception in this case |