std::basic_string<CharT,Traits,Allocator>::resize
Материал из cppreference.com
< cpp | string | basic string
(1) | ||
void resize( size_type count ); | (до C++20) | |
constexprvoid resize( size_type count ); | (начиная с C++20) | |
(2) | ||
void resize( size_type count, CharT ch ); | (до C++20) | |
constexprvoid 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(){constunsigned 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(conststd::bad_alloc& ex){std::cout<<"1. Исключение: "<< ex.what()<<'\n';} try{// размер OK, нет length_error// (может сгенерировать bad_alloc) s.resize(s.max_size(), 'x');}catch(conststd::bad_alloc& ex){std::cout<<"2. Исключение: "<< ex.what()<<'\n';} try{// размер НЕПРАВИЛЬНЫЙ, генерирует length_error s.resize(s.max_size()+1, 'x');}catch(conststd::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 функция-элемент) |