Tengo una situación donde tengo que procesar grandes (muchos de GB) cantidades de datos como tal:inicializar std :: string de char * sin copia
- construir una cadena grande añadiendo muchas más pequeña (char C *) cadenas
- recortar la cadena
- convertir la cadena en un C++ const std :: string para su procesamiento (sólo lectura)
- repetición
el da ta en cada iteración son independientes.
Mi pregunta es, me gustaría minimizar (si es posible eliminar) el uso de la memoria asignada en el montón, ya que en este momento es mi mayor problema de rendimiento.
¿Hay alguna forma de convertir una cadena C (char *) en una cadena stl C++ (std :: string) sin que se requiera que std :: string aloje/copie los datos internamente?
Como alternativa, ¿podría utilizar cadenas de caracteres o algo similar para volver a utilizar un gran buffer?
Editar: Gracias por las respuestas, para mayor claridad, creo que una pregunta revisada sería:
¿Cómo se puede construir I (a través de múltiples APPENDs) una secuencia de C++ stl eficiente. Y si realiza esta acción en un bucle, donde cada bucle es totalmente independiente, ¿cómo puedo volver a utilizar este espacio asignado?
Tu solución suena como lo que yo busco, aunque, cuando dices "puedes usar esa misma cadena de C++" ¿te refieres a usar clear() y luego continuar construyendo la siguiente cadena? – Akusete
Esta solución es la más simple de adoptar, actualmente, aunque no estoy seguro si la reutilización está realmente especificada por el estándar (aunque parece que funciona en mi implementación) – Akusete
Usar clear() debería funcionar.Hasta donde yo sé, clear() no libera la memoria utilizada por la cadena, y por lo tanto no afecta el espacio asignado por reserva(). –