Namespaces
Variants

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

From cppreference.net
std::basic_string
void resize ( size_type count ) ;
(1) (constexpr desde C++20)
void resize ( size_type count, CharT ch ) ;
(2) (constexpr desde C++20)

Cambia el tamaño de la cadena para contener count caracteres.

Si el tamaño actual es menor que count , se añaden caracteres adicionales:

1) Inicializa los caracteres añadidos a CharT ( ) ( ' \0 ' si CharT es char ).
2) Inicializa los caracteres añadidos a ch .

Si el tamaño actual es mayor que count , la cadena se reduce a sus primeros count elementos.

Contenidos

Parámetros

count - nuevo tamaño del string
ch - carácter con el que inicializar los nuevos caracteres

Excepciones

std::length_error si count > max_size ( ) es true . Cualquier excepción lanzada por el correspondiente Allocator .

Si se lanza una excepción por cualquier razón, esta función no tiene efecto ( strong exception safety guarantee ).

Ejemplo

#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 << "Funcionalidad básica:\n"
              << "Acortar:\n"
              << "1. Antes: " << std::quoted(long_string) << '\n';
    long_string.resize(desired_length);
    std::cout << "2. Después:  " << std::quoted(long_string) << '\n';
    std::cout << "Extender con un valor dado 'a':\n"
              << "3. Antes: " << std::quoted(short_string) << '\n';
    short_string.resize(desired_length, 'a');
    std::cout << "4. Después:  " << std::quoted(short_string) << '\n';
    std::cout << "Extender con char() == " << static_cast<int>(char()) << '\n'
              << "5. Antes: " << std::quoted(short_string) << '\n';
    short_string.resize(desired_length + 3);
    std::cout << "6. Después:  \"";
    for (char c : short_string)
        std::cout << (c == char() ? '@' : c);
    std::cout << "\"\n\n";
    std::cout << "Errores:\n";
    std::string s;
    try
    {
        // tamaño OK, sin length_error
        // (puede lanzar bad_alloc)
        s.resize(s.max_size() - 1, 'x');
    }
    catch (const std::bad_alloc& ex)
    {
        std::cout << "1. Excepción: " << ex.what() << '\n';
    }
    try
    {
        // tamaño OK, sin length_error
        // (puede lanzar bad_alloc)
        s.resize(s.max_size(), 'x');
    }
    catch (const std::bad_alloc& ex)
    {
        std::cout << "2. Excepción: " << ex.what() << '\n';
    }
    try
    {
        // tamaño INCORRECTO, lanzar length_error
        s.resize(s.max_size() + 1, 'x');
    }
    catch (const std::length_error& ex)
    {
        std::cout << "3. Error de longitud: " << ex.what() << '\n';
    }
}

Salida posible:

Funcionalidad básica:
Acortar:
1. Antes: "Where is the end?"
2. Después:  "Where is"
Extender con un valor dado 'a':
3. Antes: "H"
4. Después:  "Haaaaaaa"
Extender con char() == 0
5. Antes: "Haaaaaaa"
6. Después:  "Haaaaaaa@@@"
Errores:
1. Excepción: std::bad_alloc
2. Excepción: std::bad_alloc
3. Error de longitud: basic_string::_M_replace_aux

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Se aplica a Comportamiento publicado Comportamiento correcto
LWG 847 C++98 no existía garantía de seguridad de excepciones se añadió garantía de seguridad fuerte de excepciones
LWG 2250 C++98 el comportamiento era indefinido si
count > max_size ( ) es true
siempre lanza una excepción en este caso

Véase también

devuelve el número de caracteres
(función miembro pública)
reserva almacenamiento
(función miembro pública)
reduce el uso de memoria liberando memoria no utilizada
(función miembro pública)