Spec-Zone.ru › C++

std::basic_string<CharT,Traits,Allocator>::resize

void resize( size_type count );
(1) (constexpr начиная с C++20)
void resize( size_type count, CharT ch );
(2) (constexpr начиная с C++20)

Изменяет размер строки так, чтобы она содержала count символов.

Если текущий размер меньше count, добавляются дополнительные символы:

1) Инициализирует добавленные символы значением CharT() ('\0', если CharT — char).
2) Инициализирует добавленные символы значением ch.

Если текущий размер больше count, строка сокращается до первых count элементов.

Параметры

count - новый размер строки
ch - символ для инициализации новых символов

Исключения

std::length_error, если count > max_size() равен true. Любые исключения, выброшенные соответствующим 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 гарантия безопасности исключений отсутствовала добавлена гарантия строгой безопасности исключений
LWG 2250 C++98 поведение было неопределённым, если
count > max_size() равен true
в этом случае всегда выбрасывается исключение

См. также

sizelength
возвращает количество символов
(открытая функция-член)
reserve
резервирует память
(открытая функция-член)
shrink_to_fit
(DR*)
уменьшает использование памяти, освобождая неиспользуемую память
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/basic_string/resize

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API