std::basic_string<CharT,Traits,Allocator>::resize
Материал из cppreference.com
< cpp | string | basic string
(1) | ||
void resize( size_type count ); |
(до C++20) | |
constexpr void resize( size_type count ); |
(начиная с C++20) | |
(2) | ||
void resize( size_type count, CharT ch ); |
(до C++20) | |
constexpr void resize( size_type count, CharT ch ); |
(начиная с C++20) | |
��зменяет размер строки, чтобы она содержала count символов.
Если текущий размер меньше count, добавляются дополнительные символы:
1) Инициализирует добавленные символы в CharT() ('\0', если
CharT
равно char).2) Инициализирует добавленные символы в ch.
Если текущий размер больше, чем count, строка уменьшается до первых count элементов.
Содержание |
[править] Параметры
count | — | новый размер строки |
ch | — | символ для инициализации новых символов |
[править] Возвращаемое значение
(нет)
[править] Исключения
std::length_error, если count > max_size().
Любые исключения, сгенерированные соответствующим 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 << "Базовый функционал:\n" << "Сократить:\n" << "1. Перед: " << std::quoted(long_string) << '\n'; long_string.resize(desired_length); std::cout << "2. После: " << std::quoted(long_string) << '\n'; std::cout << "Удлинить с заданным значением 'a':\n" << "3. Перед: " << std::quoted(short_string) << '\n'; short_string.resize(desired_length, 'a'); std::cout << "4. После: " << std::quoted(short_string) << '\n'; std::cout << "Удлинить с помощью char() == " << static_cast<int>(char()) << '\n' << "5. Перед: " << std::quoted(short_string) << '\n'; short_string.resize(desired_length + 3); std::cout << "6. После: \""; for (char c : short_string) std::cout << (c == char() ? '@' : c); std::cout << "\"\n\n"; std::cout << "Ошибки:\n"; std::string s; try { // размер OK, нет length_error // (может сгенерировать bad_alloc) s.resize(s.max_size() - 1, 'x'); } catch (const std::bad_alloc& ex) { std::cout << "1. Исключение: " << ex.what() << '\n'; } try { // размер OK, нет length_error // (может сгенерировать bad_alloc) s.resize(s.max_size(), 'x'); } catch (const std::bad_alloc& ex) { std::cout << "2. Исключение: " << ex.what() << '\n'; } try { // размер НЕПРАВИЛЬНЫЙ, генерирует length_error s.resize(s.max_size() + 1, 'x'); } catch (const std::length_error& ex) { std::cout << "3. Ошибка длины: " << ex.what() << '\n'; } }
Возможный вывод:
Базовый функционал: Сократить: 1. Перед: "Where is the end?" 2. После: "Where is" Удлинить с заданным значением 'a': 3. Перед: "H" 4. После: "Haaaaaaa" Удлинить с помощью char() == 0 5. Перед: "Haaaaaaa" 6. После: "Haaaaaaa@@@" Ошибки: 1. Исключение: std::bad_alloc 2. Исключение: std::bad_alloc 3. Ошибка длины: basic_string::_M_replace_aux
[править] Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
Номер | Применён | Поведение в стандарте | Корректное поведение |
---|---|---|---|
LWG 847 | C++98 | не было гарантии безопасности исключений | добавлена надёжная гарантия безопасности исключений |
[править] Смотрите также
возвращает количество символов (public функция-элемент) | |
резервирует память (public функция-элемент) | |
(DR*) |
уменьшает использование памяти за счёт освобождения неиспользуемой памяти (public функция-элемент) |