IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

[IO][stream] Opérateur >> et string


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut [IO][stream] Opérateur >> et string
    Salut,


    C'est encore moi... Et pour une question assez proche de la précédente (j'ai hésité à poster à la suite).

    Je me doute que l'opérateur >> doit appeller une méthode du style operator>>(), et ce coup-ci j'aimerais savoir comment elle fonctionne avec un string (et non pas un const char* ce coup-ci j'en suis sûr ).

    J'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::ifstream in("out.cpp.txt");
     
    std::string line;
    for (int i=0; i<10000000; i++) {
        in >> line;
    }
    La ligne in >> line crée-t-elle un nouvel objet string ou bien modifie-t-elle la valeur de l'objet line existant ?


    Et plus globalement, est-ce que vous voyez quelques choses d'incorrect ou de problématique dans le code suivant (en particulier du coté performances), si ce n'est son utilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include < string >
    #include < iostream >
    #include < fstream >
     
    int main(int argc, char *argv[]) {
        std::ofstream out("out.cpp.txt");
     
        for (int i=0; i<10000000; i++) {
            out << "Caraca, estou passando na posição " << i << std::endl;
        }
     
        out.close();
     
        std::ifstream in("out.cpp.txt");
     
        std::string line;
        for (int i=0; i<10000000; i++) {
            in >> line;
        }
     
        in.close();
    }


    a++

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Elle modifie la valeur courante de l'objet line. En interne, peut-être qu'un nouvel objet est créé, mais on n'a pas à le savoir, ça dépend des implémentateurs

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par adiGuba
    La ligne in >> line crée-t-elle un nouvel objet string ou bien modifie-t-elle la valeur de l'objet line existant?
    Elle modifie la valeur de l'objet line.

    Et plus globalement, est-ce que vous voyez quelques choses d'incorrect ou de problématique dans le code suivant (en particulier du coté performances), si ce n'est son utilité
    D'apres mon experience, getline sert plus de >> pour des string (ie on veut lire ligne par ligne et pas suivant une notion de mot que je n'arrive pas a retenir). En fait meme pour autre chose que des string, on commence a lire la ligne (ou plus) et on decode ensuite. Sinon, on n'arrive pas a donner de bons messages d'erreur.

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Miles
    Elle modifie la valeur courante de l'objet line. En interne, peut-être qu'un nouvel objet est créé, mais on n'a pas à le savoir, ça dépend des implémentateurs
    Ok merci


    Citation Envoyé par Jean-Marc.Bourguet
    D'apres mon experience, getline sert plus de >> pour des string (ie on veut lire ligne par ligne et pas suivant une notion de mot que je n'arrive pas a retenir).
    Que veux-tu dire par là ? l'opérateur >> lit mot à mot et non pas ligne par ligne ???

    Donc si je veux lire le fichier ligne par ligne je devrais utiliser std:getline() ???
    C'est à dire faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        for (int i=0; i<10000000; i++) {
            std:getline(int, line);
        }
    Merci

    a++

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    oui, l'opérateur >> lit mot par mot. Si tu veux lire ligne par ligne, tu dois utiliser getline() qui est une fonction membre de istream - et donc de std::cin, std::ifstream, ... -

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Miles
    oui, l'opérateur >> lit mot par mot. Si tu veux lire ligne par ligne, tu dois utiliser getline() qui est une fonction membre de istream - et donc de std::cin, std::ifstream, ... -
    Merci pour toutes ces informations qui vont m'être bien utile

    a++

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par Miles
    oui, l'opérateur >> lit mot par mot. Si tu veux lire ligne par ligne, tu dois utiliser getline() qui est une fonction membre de istream - et donc de std::cin, std::ifstream, ... -
    Ne surtout pas utiliser la version membre, qui travaille avec un char*, mais bien la fonction libre comme adiGuba l'a fait

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    oups, pardon, je n'avais pas fait attention au prototype

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. DirectSound et le streaming
    Par Shakram dans le forum DirectX
    Réponses: 57
    Dernier message: 09/06/2005, 11h05
  2. [BLOB]Enreg Stream dans Field
    Par sbeu dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/03/2004, 16h06
  3. Streaming video sous Linux
    Par freeshman dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 03/01/2004, 17h17
  4. Streaming fichier PDF
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 22/05/2003, 22h14
  5. Comment enregistrer un stream de longueur fixe ?
    Par Alcarbone dans le forum MFC
    Réponses: 5
    Dernier message: 13/04/2003, 20h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo