std::basic_string<CharT,Traits,Allocator>::resize
| (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 << "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 | гарантия исключительной безопасности отсутствовала | добавлена гарантия сильной исключительной безопасности |
См. также
| возвращает количество символов (публичный член-функция) |
|
| резервирует память (публичный член-функция) |
|
|
(DR*) | уменьшает использование памяти, освобождая неиспользуемую память (публичный член-функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/string/basic_string/resize