std::basic_string<CharT,Traits,Allocator>:: resize
|
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:
CharT
es
char
).
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) |
|
|
(
DR*
)
|
reduce el uso de memoria liberando memoria no utilizada
(función miembro pública) |