std::basic_string<CharT,Traits,Allocator>:: reserve
| (1) | ||
|
void
reserve
(
size_type new_cap
=
0
)
;
|
(hasta C++20) | |
|
constexpr
void
reserve
(
size_type new_cap
)
;
|
(desde C++20) | |
|
void
reserve
(
)
;
|
(2) |
(desde C++20)
(obsoleto en C++20) (eliminado en C++26) |
std::basic_string
de un cambio planificado en el tamaño, para que pueda gestionar la asignación de almacenamiento adecuadamente.
- Si new_cap es mayor que la capacity() actual, se asigna nuevo almacenamiento y capacity() se establece igual o mayor que new_cap .
|
(until C++20) |
|
(since C++20) |
Contenidos |
Parámetros
| new_cap | - | nueva capacidad de la cadena |
Valor de retorno
(ninguno)
Excepciones
Lanza std::length_error si new_cap es mayor que max_size() .
Puede lanzar cualquier excepción lanzada por std:: allocator_traits < Allocator > :: allocate ( ) , como std::bad_alloc .
Si se lanza una excepción por cualquier razón, esta función no tiene efecto ( strong exception safety guarantee ).
Complejidad
Como máximo lineal en el size() de la cadena.
Ejemplo
#include <cassert> #include <iostream> #include <string> int main() { std::string s; std::cout << "1) Inicialmente: " << s.capacity() << '\n'; const std::string::size_type new_cap{101u}; s.reserve(new_cap); assert(s.capacity() >= new_cap); std::cout << "2) Después de reserve(" << new_cap << "): " << s.capacity() << '\n'; // observando el factor de crecimiento de la capacidad auto cap{s.capacity()}; for (int check{}; check != 4; ++check) { while (cap == s.capacity()) s += '$'; cap = s.capacity(); std::cout << (3) + check << ") Capacidad: " << cap << '\n'; } // s.reserve(); // obsoleto/eliminado en C++20/26, usar: s.shrink_to_fit(); std::cout << "7) Después de shrink_to_fit: " << s.capacity() << '\n'; }
Salida posible:
1) Inicialmente: 15 2) Después de reserve(101): 101 3) Capacidad: 202 4) Capacidad: 404 5) Capacidad: 808 6) Capacidad: 1616 7) Después de shrink_to_fit: 809
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 847 | C++98 | no había garantía de seguridad de excepciones | se añadió garantía de seguridad fuerte de excepciones |
Véase también
|
devuelve el número de caracteres que pueden almacenarse en el almacenamiento actualmente asignado
(función miembro pública) |
|
|
cambia el número de caracteres almacenados
(función miembro pública) |