std::basic_string<CharT,Traits,Allocator>:: resize
|
void
resize
(
size_type count
)
;
|
(1) | (constexpr начиная с C++20) |
|
void
resize
(
size_type count, CharT ch
)
;
|
(2) | (constexpr начиная с C++20) |
Изменяет размер строки, чтобы она содержала count символов.
Если текущий размер меньше count , добавляются дополнительные символы:
CharT
является
char
).
Если текущий размер больше count , строка сокращается до первых count элементов.
Содержание |
Параметры
| count | - | новый размер строки |
| ch | - | символ для инициализации новых символов |
Исключения
std::length_error
если
count
>
max_size
(
)
равно
true
.
Любые исключения, выброшенные соответствующим
Allocator
.
Если по какой-либо причине возникает исключение, эта функция не оказывает никакого эффекта ( гарантия строгой безопасности исключений ).
Пример
#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'; } }
Возможный вывод:
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
Отчеты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 847 | C++98 | гарантия безопасности исключений отсутствовала | добавлена строгая гарантия безопасности исключений |
| LWG 2250 | C++98 |
поведение было неопределенным, если
count > max_size ( ) is true |
всегда выбрасывает исключение в этом случае |
Смотрите также
|
возвращает количество символов
(публичная функция-член) |
|
|
резервирует память
(публичная функция-член) |
|
|
(
DR*
)
|
уменьшает использование памяти, освобождая неиспользуемую память
(публичная функция-член) |