Devrait-il y avoir une raison de préférer getline ou istream_iterator si vous faites une ligne par ligne depuis un fichier (en lisant la ligne dans une chaîne, pour la tokenisation).getline vs istream_iterator
Répondre
Je parfois (en fonction de la situation) écrire une classe de ligne donc je peux utiliser istream_iterator
:
#include <string>
#include <vector>
#include <iterator>
#include <iostream>
#include <algorithm>
struct Line
{
std::string lineData;
operator std::string() const
{
return lineData;
}
};
std::istream& operator>>(std::istream& str,Line& data)
{
std::getline(str,data.lineData);
return str;
}
int main()
{
std::vector<std::string> lines;
std::copy(std::istream_iterator<Line>(std::cin),
std::istream_iterator<Line>(),
std::back_inserter(lines)
);
}
getline
vous obtiendrez la ligne entière, tandis que istream_iterator<std::string>
vous donnera des mots individuels (séparés par des espaces). Cela dépend de ce que vous essayez d'accomplir, si vous demandez ce qui est le mieux (la segmentation est juste un bit, par exemple si vous attendez un programme bien formé et que vous vous attendez à l'interpréter, il vaut peut-être mieux lire lignes entières ...)
Désolé j'aurais dû ajouter que la ligne est séparée par des virgules. donc istream_iterator
Si vous ne vous attendez pas à ce que l'entrée soit malformée _EVER_, ce qui est difficile à dire, oui, vous obtiendrez une ligne entière. – dirkgently
Chaque cellule d'une ligne ne doit pas non plus contenir d'espaces. –
- 1. std :: getline et eol vs eof
- 2. istream_iterator fuite de mémoire
- 3. copie en utilisant istream_iterator
- 4. C++ EOF Getline Erreur
- 5. std :: getline() renvoie
- 6. C++ timeout sur getline
- 7. manutention SIGINT et getline
- 8. Besoin d'aide avec getline()
- 9. Python équivalent de C++ getline()
- 10. getline en C++ - Besoin d'aide
- 11. Caractère Getline et 16h (26d)
- 12. Comportement inattendu de getline() avec ifstream
- 13. C++: getline() ignorant les premiers caractères
- 14. saute sur getline() sans prendre l'entrée d'utilisateur
- 15. recherche de l'eof dans la chaîne :: getline
- 16. getline et le traitement des fichiers
- 17. Lecture de parties d'une ligne (getline())
- 18. Lecture des lignes d'un fichier en utilisant std :: istream_iterator. Qui?
- 19. C++ erreur de compilation en utilisant la chaîne et istream_iterator
- 20. est-il possible d'avoir la fonction getline() accepter wistream &
- 21. Existe-t-il d'autres implémentations de l'interface GNU getline?
- 22. Problème de boucle. Cin C++ getline clear buffer
- 23. getline sur le compilateur C écrasant MacOSX 10.6?
- 24. Aide C++ avec la fonction getline avec ifstream
- 25. Utilisation de plusieurs instances de getline en C++
- 26. Comment puis-je empêcher un programme d'ignorer getline?
- 27. en utilisant un istream_iterator pour lire dans un vecteur de structs du clavier?
- 28. Utilisation de istream_iterator et lecture à partir de l'entrée ou du fichier standard
- 29. Pourquoi ne puis-je pas construire un std :: istream_iterator avec un temporaire sans nom?
- 30. Rhino simulé vs Typemock vs JustMock vs
Vous avez genre de répondu à la question vous - utilisez 'getline' pour obtenir une ligne, ou 'istream_iterator' pour la tokenisation. –