Difference between revisions of "cpp/string/basic string/resize"
From cppreference.com
< cpp | string | basic string
m (add shrink_to_fit() to see also section since it's related) |
Andreas Krug (Talk | contribs) m ({{c}}, headers sorted, fmt) |
||
Line 1: | Line 1: | ||
− | {{cpp/string/basic_string/title | resize}} | + | {{cpp/string/basic_string/title|resize}} |
{{cpp/string/basic_string/navbar}} | {{cpp/string/basic_string/navbar}} | ||
{{dcl begin}} | {{dcl begin}} | ||
− | {{dcl rev multi | num=1 | + | {{dcl rev multi|num=1 |
− | | until1=c++20 | dcl1= | + | |until1=c++20|dcl1= |
void resize( size_type count ); | void resize( size_type count ); | ||
− | | dcl2= | + | |dcl2= |
constexpr void resize( size_type count ); | constexpr void resize( size_type count ); | ||
}} | }} | ||
− | {{dcl rev multi | num=2 | + | {{dcl rev multi|num=2 |
− | | until1=c++20 | dcl1= | + | |until1=c++20|dcl1= |
void resize( size_type count, CharT ch ); | void resize( size_type count, CharT ch ); | ||
− | | dcl2= | + | |dcl2= |
constexpr void resize( size_type count, CharT ch ); | constexpr void resize( size_type count, CharT ch ); | ||
}} | }} | ||
{{dcl end}} | {{dcl end}} | ||
− | Resizes the string to contain {{ | + | Resizes the string to contain {{c|count}} characters. |
− | If the current size is less than {{ | + | If the current size is less than {{c|count}}, additional characters are appended: |
@1@ Initializes appended characters to {{c|CharT()}} ({{c|'\0'}} if {{tt|CharT}} is {{c|char}}). | @1@ Initializes appended characters to {{c|CharT()}} ({{c|'\0'}} if {{tt|CharT}} is {{c|char}}). | ||
− | @2@ Initializes appended characters to {{ | + | @2@ Initializes appended characters to {{c|ch}}. |
− | If the current size is greater than {{ | + | If the current size is greater than {{c|count}}, the string is reduced to its first {{c|count}} elements. |
===Parameters=== | ===Parameters=== | ||
− | |||
{{par begin}} | {{par begin}} | ||
− | {{par | count | new size of the string}} | + | {{par|count|new size of the string}} |
− | {{par | ch | character to initialize the new characters with }} | + | {{par|ch|character to initialize the new characters with}} |
{{par end}} | {{par end}} | ||
Line 47: | Line 46: | ||
===Example=== | ===Example=== | ||
{{example | {{example | ||
− | | code = | + | |code = |
− | + | ||
#include <iomanip> | #include <iomanip> | ||
+ | #include <iostream> | ||
#include <stdexcept> | #include <stdexcept> | ||
int main() | int main() | ||
{ | { | ||
− | const unsigned | + | const unsigned desired_length{8}; |
− | std::string | + | std::string long_string("Where is the end?"); |
− | std::string | + | std::string short_string("H"); |
− | + | ||
std::cout << "Basic functionality:\n" | std::cout << "Basic functionality:\n" | ||
<< "Shorten:\n" | << "Shorten:\n" | ||
− | << "1. Before: " << quoted( long_string ) << '\n'; | + | << "1. Before: " << quoted(long_string) << '\n'; |
− | long_string.resize( desired_length ); | + | long_string.resize(desired_length); |
− | std::cout << "2. After: " << quoted( long_string ) << '\n'; | + | std::cout << "2. After: " << quoted(long_string) << '\n'; |
− | + | ||
std::cout << "Lengthen with a given value 'a':\n" | std::cout << "Lengthen with a given value 'a':\n" | ||
− | << "3. Before: " << quoted( short_string ) << '\n'; | + | << "3. Before: " << quoted(short_string) << '\n'; |
− | short_string.resize( desired_length, 'a' ); | + | short_string.resize(desired_length, 'a'); |
− | std::cout << "4. After: " << quoted( short_string ) << '\n'; | + | std::cout << "4. After: " << quoted(short_string) << '\n'; |
− | + | ||
std::cout << "Lengthen with char() == " << static_cast<int>(char()) << '\n' | std::cout << "Lengthen with char() == " << static_cast<int>(char()) << '\n' | ||
− | << "5. Before: " << quoted( short_string ) << '\n'; | + | << "5. Before: " << quoted(short_string) << '\n'; |
− | short_string.resize( desired_length + 3 ); | + | short_string.resize(desired_length + 3); |
std::cout << "6. After: \""; | std::cout << "6. After: \""; | ||
− | for (char c : short_string) | + | for (char c : short_string) |
std::cout << (c == char() ? '@' : c); | std::cout << (c == char() ? '@' : c); | ||
− | |||
std::cout << "\"\n\n"; | std::cout << "\"\n\n"; | ||
− | |||
std::cout << "Errors:\n"; | std::cout << "Errors:\n"; | ||
+ | std::string s; | ||
+ | |||
+ | try | ||
{ | { | ||
− | std:: | + | // 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'; | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
} | } | ||
} | } | ||
− | + | |p=true | |
− | + | |output= | |
Basic functionality: | Basic functionality: | ||
Shorten: | Shorten: | ||
Line 131: | Line 132: | ||
===See also=== | ===See also=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc inc | cpp/string/basic_string/dsc size}} | + | {{dsc inc|cpp/string/basic_string/dsc size}} |
− | {{dsc inc | cpp/string/basic_string/dsc reserve}} | + | {{dsc inc|cpp/string/basic_string/dsc reserve}} |
− | {{dsc inc | cpp/string/basic_string/dsc shrink_to_fit}} | + | {{dsc inc|cpp/string/basic_string/dsc shrink_to_fit}} |
{{dsc end}} | {{dsc end}} | ||
{{langlinks|de|es|fr|it|ja|pt|ru|zh}} | {{langlinks|de|es|fr|it|ja|pt|ru|zh}} |
Revision as of 10:26, 2 June 2023
(1) | ||
void resize( size_type count ); |
(until C++20) | |
constexpr void resize( size_type count ); |
(since C++20) | |
(2) | ||
void resize( size_type count, CharT ch ); |
(until C++20) | |
constexpr void resize( size_type count, CharT ch ); |
(since C++20) | |
Resizes the string to contain count characters.
If the current size is less than count, additional characters are appended:
1) Initializes appended characters to CharT() ('\0' if
CharT
is char).2) Initializes appended characters to ch.
If the current size is greater than count, the string is reduced to its first count elements.
Contents |
Parameters
count | - | new size of the string |
ch | - | character to initialize the new characters with |
Return value
(none)
Exceptions
std::length_error if count > max_size().
Any exceptions thrown by corresponding Allocator
.
If an exception is thrown for any reason, this function has no effect (strong exception guarantee).(since C++11)
Example
Run this code
#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: " << quoted(long_string) << '\n'; long_string.resize(desired_length); std::cout << "2. After: " << quoted(long_string) << '\n'; std::cout << "Lengthen with a given value 'a':\n" << "3. Before: " << quoted(short_string) << '\n'; short_string.resize(desired_length, 'a'); std::cout << "4. After: " << quoted(short_string) << '\n'; std::cout << "Lengthen with char() == " << static_cast<int>(char()) << '\n' << "5. Before: " << 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: 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
See also
returns the number of characters (public member function) | |
reserves storage (public member function) | |
(DR*) |
reduces memory usage by freeing unused memory (public member function) |