Quiero usar std :: string simplemente para crear un buffer dinámico y para iterar a través de él usando un índice. ¿Resize() la única función para asignar realmente el buffer?std :: strings's capacity(), reserve() & resize() functions
Intenté reservar() pero cuando intento acceder a la cadena a través del índice, afirma. También cuando la capacidad predeterminada de la cadena parece ser de 15 bytes (en mi caso), pero si sigo sin poder acceder a ella como my_string[1]
.
¿Entonces la capacidad de la cadena no es la memoria intermedia real? También reserve() tampoco asigna el buffer real?
string my_string;
// I want my string to have 20 bytes long buffer
my_string.reserve(20);
int i = 0;
for (parsing_something_else_loop)
{
char ch = <business_logic>;
// store the character in
my_string[i++] = ch; // this crashes
}
Si hago el cambio de tamaño() en lugar de reservar() que funciona bien. ¿Cómo es que la cuerda tiene la capacidad pero no puede acceder a ella con []? ¿No es ese el tamaño de reservar() para que puedas acceder a él?
Add-on En respuesta a las respuestas, me gustaría pedir a la gente stl, ¿por qué nadie reserva de uso() cuando cambio de tamaño() hace exactamente lo mismo y también iniciar la cadena? Debo decir que no aprecio tanto el argumento del rendimiento en este caso. Todo lo que resize() hace además de lo que reserva() es que simplemente inicializa el búfer que sabemos que siempre es bueno hacer de todos modos. ¿Podemos votar reservar() fuera de la isla?
¿Sería un vector de bytes más apropiado – rerun
** ** std :: vector parece también una posible solución para sus necesidades . ¿Una respuesta con std :: vector también sería una respuesta aceptable? –