std::basic_string<CharT,Traits,Allocator>::resize
Материал из cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
| (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 функция-элемент) |