Maison >développement back-end >C++ >Comment lire efficacement des fichiers dans std :: vector sans surcharge inutile ?

Comment lire efficacement des fichiers dans std :: vector sans surcharge inutile ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-10 21:35:031046parcourir

How to Efficiently Read Files into std::vector Without Unnecessary Overhead?

Méthodes alternatives pour lire des fichiers dans std::vector

Lecture de fichiers dans std::vector l’efficacité est essentielle pour les tâches de traitement des données. Cependant, certaines méthodes, telles que reserve() et resize(), entraînent une surcharge supplémentaire en raison de l'initialisation des éléments. Pour cette raison, des méthodes alternatives peuvent être préférées.

L'une de ces méthodes consiste à exploiter les itérateurs de la classe std::istreambuf_iterator. Cette approche élimine les copies inutiles et permet un accès direct au contenu du fichier. La forme canonique de cette approche est :

#include<iterator>
// ...

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

Pour éviter les réallocations, pensez à réserver au préalable de l'espace dans le vecteur :

#include<iterator>
// ...

std::ifstream testFile("testfile", std::ios::binary);
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