Lire des entiers à partir d'un fichier texte avec C ifstream
Récupérer et stocker des informations de contiguïté de graphiques à partir d'un fichier texte dans un vecteur présente un défi lorsque traitant des lignes de nombre entier variable. Voici une solution complète utilisant ifstream de C :
L'approche traditionnelle consiste à lire chaque ligne à l'aide de getline() et à utiliser un flux de chaîne d'entrée pour analyser la ligne. Cette technique fonctionne bien pour les lignes avec un nombre constant d'entiers.
<code class="cpp">#include <fstream> #include <sstream> #include <vector> std::ifstream infile("text_file.txt"); std::string line; while (std::getline(infile, line)) { std::istringstream iss(line); int n; std::vector<int> v; while (iss >> n) { v.push_back(n); } // Process the vector v }</code>
Cependant, si vous avez des lignes avec différents nombres d'entiers, il existe une solution sur une seule ligne qui exploite une boucle et l'idiome « rester » , avec l'aimable autorisation de Luc Danton :
<code class="cpp">#include <sstream> #include <iterator> #include <vector> int main() { std::vector<std::vector<int>> vv; for (std::string line; std::getline(std::cin, line); vv.push_back(std::vector<int>(std::istream_iterator<int>(std::move(std::istringstream(line))), std::istream_iterator<int>())) ); // Process the vector of vectors vv }</code>
Dans cet extrait, l'expression 'stay' garantit que la référence lvalue fournie reste valide après le déplacement. Ce déplacement est nécessaire pour plus d'efficacité, car il évite la copie inutile de caractères.
Ces solutions fournissent des méthodes efficaces et polyvalentes pour extraire des entiers d'un fichier texte et les stocker dans un vecteur, que les lignes aient une forme cohérente ou nombre variable d'entiers.
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!