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

C++ Discussion :

map<>::const_iterator iter et iter++


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 135
    Points : 83
    Points
    83
    Par défaut map<>::const_iterator iter et iter++
    bon soir,
    et ben ces temps ci je doit dire que vous me filer vraiment un grand coup de main, donc merci encore.

    voila mon problème que je n'ai ni réussi a résoudre par une comparaison, a un exemple plus simple, ni par le debugage:
    (violation d'accès (erreur de segmentation) ect.),
    mais en dehors du debug, pas de soussit ça s'exécute, c'est juste le résultat qui ... :

    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
     
         map <long long int, long long int> cont;
     
         ofstream ofile("C:\\raw2",ios_base::trunc);
     
         premiere.get_pts(cont);
         map<long long int,long long int>::const_iterator iter = cont.begin();
         ofile<<iter->first<<";";
         for(iter;iter!=(cont.end()--);++iter){
                                                if ((iter->second) < ((++iter)->first)){
                                                   ofile<<(iter--)->second<<"\n"<<(iter++)->first<<";";
                                                   if (((iter)->second)>maxx){
                                                                   cout<<"un max a ete trouver"<<endl;
                                                                   tmp = iter->first;
                                                                   premiere.chr_file(tmp,"pts");
                                                                   }
                                                   }
                                                }
    le fichier raw2 me donne:
    20080818174343;20080819220951
    20080819205231;20080821210651
    20080821195258;20080822054342
    20080822042952;20080825221813
    20080825203016;20080826060604
    20080826052614;20080826075202
    20080826071409;20080827072337
    20080826080254;20080827135328
    20080827121356;17237545221799356
    20080827152339;
    c'est l'avant dernière ligne le nombre: 17237545221799356....
    qui, je le souhaiterai, soit détecter par.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (((iter)->second)>maxx){
    la seul chose que j'ai comprise, c'est qu'il y a un certain probleme avec mes incrementation, mais j'ai pas réussi a corriger l'erreur.
    si quelqu'un a une idee....

  2. #2
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 135
    Points : 83
    Points
    83
    Par défaut corection
    pardon:
    maxx est fixé a 20090000000000
    par le code qu'on voit pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IniRead(chem,"parametre","max",max);
    from_string(max, maxx);

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 142
    Points : 89
    Points
    89
    Par défaut
    Bonsoir,

    Ne le prends pas mal, mais ton code est tout simplement illisible.
    Réécris-le en enlevant tous ces -- et ++ de partout (excepté de ++iter du for), et tu y verras toi-même plus clair.
    Et si tu ne vois pas toi-même ton erreur, reviens nous voir et nous serons aptes à t'aider.

  4. #4
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 135
    Points : 83
    Points
    83
    Par défaut mouai
    pourquoi pas, mais je vois pas trop comment:
    je doit comparer le second élément de la pair x,
    au premier élément de la pair x+1...

    donc bref, je vais essayer d'aborder ce problème d'un autre coter.

    juste, je me trompe pas en pensant:
    que ce soit dans une instruction if (xxxxxx), ou autre,
    l'instruction iter++ ou ++iter incrémente l'iterateur, de façon définitive,
    c'est bien ça???

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 142
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par neismarspra Voir le message
    pourquoi pas, mais je vois pas trop comment:
    je doit comparer le second élément de la pair x,
    au premier élément de la pair x+1...
    Une idée intéressante serait d'utiliser un deuxième itérateur incrémenté au même moment qu'iter, mais initialisé à begin() + 1 avant la boucle.

    Citation Envoyé par neismarspra Voir le message
    juste, je me trompe pas en pensant:
    que ce soit dans une instruction if (xxxxxx), ou autre,
    l'instruction iter++ ou ++iter incrémente l'iterateur, de façon définitive,
    c'est bien ça???
    Absolument, c'est pour ça que c'est vraiment bordélique d'en mettre partout.
    À noter également ceci (valable aussi bien pour un int, qu'un pointeur ou un itérateur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int i, n1, n2;
     
    i = 0;
    n1 = i++;
    //ici, on a i = 1 mais n1 = 0
     
    i = 0;
    n2 = ++i;
    //ici, on a i = 1 et n2 = 1

  6. #6
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 135
    Points : 83
    Points
    83
    Par défaut ok
    ok, merci
    j'ai commencer avec une vielle méthode (lourde niveau cpu et code, mais c'est sur qu'elle marche). après ça je vais passer a l'idée du second iterateur
    et je poste la solution cette matinée.

    mais la c'est clope et au lit

    merci

  7. #7
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 135
    Points : 83
    Points
    83
    Par défaut dieux seul sais
    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
         for(iter;iter!=--cont.end();++iter){
                                           de1=iter->first;
                                           fi1=iter->second;
                                           iter++;
                                           de2=iter->first;
                                           fi2=iter->second;
                                           iter--;
                                               if ((fi1) < (de2)){
                                                   ofile<<fi1<<"\n"<<de2<<";";
                                                   if ((maxx)>maxx){
                                                                   cout<<"un max a ete trouver"<<endl;
                                                                   tmp = iter->second;
                                                                   premiere.chr_file(tmp,"pts");
                                                                   }
                                                   }
                                                }
    c'est la version cochon que je vais remplacer, mais qui marche maintenant,
    ce n'était probablement qu'un dépassement de la taille de la map, qui me sorter une valeur au pif de la ram.

    raw2:
    20080818174343;20080819035836
    20080819040859;20080819052904
    20080819053137;20080819202135
    20080819205231;20080821060059
    20080821185212;20080821193812
    20080821195258;20080821214434
    20080822042952;20080822205053
    20080824211104;20080825063112
    20080825203016;20080826052047
    20080826052614;20080826070634
    20080826071409;20080826075202
    20080826080254;20080826082647
    20080827065252;20080827074216
    20080827114350;20080827121347
    20080827121356;20080827123853
    20080827132520;20080827135328
    20080827152339;
    merci. et bonne journée

  8. #8
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 135
    Points : 83
    Points
    83
    Par défaut
    oui, et en plus la comparaison a une int[], m'avais bien montrer que je sauter une valeur a chaque boucle (la liste finale est deux fois plus longue) lol

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

Discussions similaires

  1. remplacer string::iterator par iterator
    Par jfjobidon dans le forum Débuter
    Réponses: 2
    Dernier message: 23/04/2015, 16h50
  2. Test d'une String dans un Iterator ( <s:iterator, <s:if )
    Par chezwam56 dans le forum Struts 2
    Réponses: 11
    Dernier message: 23/08/2011, 16h31
  3. Iterator et iterator()
    Par tanguy.L dans le forum Langage
    Réponses: 9
    Dernier message: 12/11/2008, 01h23
  4. Map::iterator et template
    Par kast_or dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2006, 19h15
  5. initialisation d'une map et d'un iterator
    Par petitmic dans le forum C++
    Réponses: 2
    Dernier message: 12/04/2006, 23h22

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