Maison > développement back-end > C++ > le corps du texte

Comment analyser efficacement des entiers à partir d'un fichier texte avec des comptes variables dans un vecteur en C ?

Patricia Arquette
Libérer: 2024-10-30 19:54:30
original
450 Les gens l'ont consulté

How to Efficiently Parse Integers from a Text File with Varying Counts into a Vector in C  ?

Lecture d'entiers à partir d'un fichier texte avec C ifstream

Lorsque vous essayez de lire des informations de contiguïté de graphiques à partir d'un fichier texte, vous pouvez rencontrer des lignes avec un nombre variable d'entiers terminés par 'n'. Utiliser la méthode getline() pour récupérer chaque ligne individuellement pose le défi d'analyser avec précision chaque ligne en raison de son nombre incohérent d'entiers. Des stratégies sont recherchées pour résoudre ce problème et stocker efficacement ces valeurs dans un vecteur.

L'approche conventionnelle nécessite une itération sur chaque ligne lue par getline() et l'utilisation d'un objet istringstream pour analyser chaque ligne. Comme les entiers sont lus séquentiellement, ils peuvent être ajoutés à un vecteur, qui peut ensuite être manipulé à volonté. Le code suivant illustre cette approche :

<code class="cpp">#include <fstream>
#include <sstream>
#include <string>
#include <vector>

int main() {
  std::ifstream infile("thefile.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);
    }

    // Do something with v
  }
}</code>
Copier après la connexion

Une solution alternative implique une boucle for sur une seule ligne. En utilisant la classe istream_iterator, nous pouvons lire les valeurs directement dans un vecteur, réduisant ainsi le besoin de conteneurs intermédiaires. Une fonction auxiliaire est également utilisée pour éviter les références potentielles pendantes qui pourraient résulter de std::move.

<code class="cpp">#include <fstream>
#include <string>
#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::stay(std::istringstream(line))),
                                     std::istream_iterator<int>())
                    )
       ) { }
}</code>
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!