Пространства имён
Варианты
Действия

basic_string<CharT,Traits,Allocator>::resize

Материал из cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
Функции-элементы
Доступ к элементам
Итераторы
Ёмкость
Операции
basic_string::resize
Поиск
Константы
Правила вывода (C++17)
Функции, не являющиеся элементами
Ввод/Вывод
Сравнение
(до C++20)(до C++20)(до C++20)(до C++20)(до C++20)(C++20)
Числовые преобразования
(C++11)(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
Вспомогательные классы
 
(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 функция-элемент) [править]
уменьшает использование памяти за счёт освобождения неиспользуемой памяти
(public функция-элемент) [править]