Maison  >  Article  >  développement back-end  >  Comment lire efficacement un fichier dans un « std :: vector » sans surcharge ?

Comment lire efficacement un fichier dans un « std :: vector » sans surcharge ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-11 18:48:03910parcourir

How to Efficiently Read a File into a `std::vector` Without Overhead?

Gestion efficace des fichiers dans un vecteur de caractères

Dans une quête visant à optimiser la lecture de fichiers dans un std::vector, un développeur rencontre un défi. La méthode typique utilisant la réserve et la lecture ultérieure conduit à une erreur en raison du manque d'éléments à l'index 0. D'autres méthodes telles que le redimensionnement ou l'initialisation d'un vecteur avec une taille entraînent une surcharge que le développeur souhaite éviter.

La solution réside dans l’utilisation d’itérateurs. En créant un itérateur streambuf d'entrée et en l'utilisant pour construire un vecteur, le contenu du fichier peut être directement affecté au vecteur sans avoir besoin de copies intermédiaires. L'extrait de code suivant illustre cette approche :

#include<iterator>

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

Pour des problèmes de performances, réserver de l'espace dans le vecteur avant l'affectation peut empêcher les réallocations :

std::vector<char> fileContents;
fileContents.reserve(fileSize);
fileContents.assign(std::istreambuf_iterator<char>(testFile),
                    std::istreambuf_iterator<char>());

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn