Maison > développement back-end > C++ > Comment lire efficacement des entiers à partir d'un fichier texte avec des nombres entiers variables à l'aide de C ifstream ?

Comment lire efficacement des entiers à partir d'un fichier texte avec des nombres entiers variables à l'aide de C ifstream ?

DDD
Libérer: 2024-11-02 18:20:29
original
770 Les gens l'ont consulté

How to Efficiently Read Integers from a Text File with Varying Integer Counts Using C   ifstream?

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

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

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal