"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment charger efficacement un fichier dans un « std :: vector » ?

Comment charger efficacement un fichier dans un « std :: vector » ?

Publié le 2024-11-15
Parcourir:815

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

Charger efficacement un fichier dans un std::vector

Pour charger efficacement un fichier dans un std::vector, il faut éviter les copies inutiles et les réallocations de mémoire. Bien que l'approche originale utilisant reserve et read() puisse sembler directe, reserve() à elle seule ne modifie pas la capacité du vecteur.

Méthode canonique utilisant des itérateurs :

La méthode canonique utilisant des itérateurs L'approche utilise des itérateurs de flux d'entrée pour construire facilement le vecteur à partir du contenu du fichier :

#include 
// ...

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

Optimisation des réallocations :

Si minimiser les réallocations de mémoire est crucial, allouez de l'espace dans le vecteur avant de charger le contenu du fichier :

#include 
// ...

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

En utilisant des itérateurs de flux et en pré-allouant de la mémoire si nécessaire, ces approches offrent un chargement efficace des fichiers dans un std::vector.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3