"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo cargar un archivo de manera eficiente en un `std::vector`?

¿Cómo cargar un archivo de manera eficiente en un `std::vector`?

Publicado el 2024-11-15
Navegar:928

How to Efficiently Load a File into an `std::vector`?

Cargar eficientemente un archivo en un std::vector

Para cargar eficientemente un archivo en un std::vector, se deben evitar copias y reasignaciones de memoria innecesarias. Si bien el enfoque original que utiliza reserve y read() puede parecer directo, reserve() por sí solo no altera la capacidad del vector.

Método canónico usando iteradores:

El método canónico Este enfoque emplea iteradores de flujo de entrada para construir convenientemente el vector a partir del contenido del archivo:

#include 
// ...

std::ifstream testFile("testfile", std::ios::binary);
std::vector fileContents((std::istreambuf_iterator(testFile)),
                               std::istreambuf_iterator());

Optimización para reasignaciones:

Si minimizar las reasignaciones de memoria es crucial, asigne espacio en el vector antes de cargar el contenido del archivo :

#include 
// ...

std::ifstream testFile("testfile", std::ios::binary);
std::vector fileContents;
fileContents.reserve(fileSize);
fileContents.assign(std::istreambuf_iterator(testFile),
                    std::istreambuf_iterator());

Al utilizar iteradores de flujo y preasignar memoria cuando sea necesario, estos enfoques ofrecen una carga eficiente de archivos en un std::vector.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3