2010-11-25 2 views

Répondre

0

Comme @ Steve Townsend dit ci-dessus, il est sans doute pas la peine, si vous vouliez faire (et vous saviez d'avance le nombre de lignes concernées), vous pouvez faire quelque chose comme:

#include <iostream> 
#include <iterator> 
#include <string> 
#include <sstream> 
#include <algorithm> 

using namespace std; 

template <typename _t, int _count> 
struct ftor 
{ 
    ftor(istream& str) : _str(str), _c() {} 

    _t operator()() 
    { 
    ++_c; 
    if (_count > _c) return *(_str++); // need more 
    return *_str; // last one 
    } 

    istream_iterator<_t> _str; 
    int _c; 
}; 

int main(void) 
{ 
    ostringstream sv; 
    generate_n(ostream_iterator<string>(sv, "\n"), 5, ftor<string, 5>(cin)); 

    cout << sv.str(); 

    return 0; 
} 
+1

Vous lisez des mots, pas des lignes. La fin du flux peut facilement être testée sans connaissance préalable du nombre de lignes. Utilisez simplement l'opérateur void *. – Basilevs

0

Il y a les informations détaillées dans la question ci-dessous (par York @ Martin) à la lecture directe de flux pour stringstream. Ce n'est pas un dup direct puisque vous souhaitez gérer l'entrée ligne par ligne, mais cette approche sera difficile à battre pour l'efficacité. Vous pouvez instancier les lignes individuelles en utilisant une plage de caractères une fois que les données brutes sont dans la chaîne strings.

How to read file content into istringstream?

Pour être honnête, cela peut être beaucoup de travail pour un problème qui est pas vraiment un problème énorme de toute façon perf.

Questions connexes