"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como carregar um arquivo com eficiência em um `std::vector`?

Como carregar um arquivo com eficiência em um `std::vector`?

Publicado em 15/11/2024
Navegar:218

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

Carregando eficientemente um arquivo em um std::vector

Para carregar eficientemente um arquivo em um std::vector, deve-se evitar cópias desnecessárias e realocações de memória. Embora a abordagem original utilizando reserve e read() possa parecer direta, reserve() por si só não altera a capacidade do vetor.

Método canônico usando iteradores:

O canônico abordagem emprega iteradores de fluxo de entrada para construir convenientemente o vetor a partir do conteúdo do arquivo:

#include 
// ...

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

Otimizando para realocações:

Se minimizar as realocações de memória for crucial, aloque espaço no vetor antes de carregar o conteúdo do arquivo :

#include 
// ...

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

Ao utilizar iteradores de fluxo e pré-alocar memória quando necessário, essas abordagens oferecem carregamento eficiente de arquivos em um std::vector.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3