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

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

Susan Sarandon
Libérer: 2024-11-11 18:48:03
original
960 Les gens l'ont consulté

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>());
Copier après la connexion

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>());
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal