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 :

pbm d'utilisation iterateur


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 103
    Par défaut pbm d'utilisation iterateur
    bonjour,

    voilà j'arrive pas à utiliser un iterateur comme je le voudrai ... je pige pas vraiment ce qu'il ne faut pas fair... une idée ?

    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
    23
    24
    25
    26
    int expand(std::list<waymap_way> &pascher){
    			if (expanded){ // expand childs < cout
    				return 0; // ne peu plus etre expand
    			}
    			expanded=true;waymap_way*  tmp;
    			list <waymap_way>::iterator ite = pascher.begin();
     
    			for(unsigned int i = 0; i < nod->voisins.size(); i++){
    				childs.push_back(tmp = new waymap_way(nod->voisins[i], this));
    				tmp->cost = ((parent == 0)? 0:cost)+(nod->voisins[i]->pos - nod->pos).length();
    				if(!pascher.empty()){
    					while (ite != pascher.end() && (*ite).cost <= tmp->cost){ 
    						ite++;
    						MinimalOgreApp::mConsole->print("++");
    					}
    					while (ite != pascher.begin() && (*ite).cost > tmp->cost){// plantage là...
    						MinimalOgreApp::mConsole->print("--");
    						ite--;
    					}
    				}
    				MinimalOgreApp::mConsole->print(toStr(i)+" !! :"+toStr(tmp->cost));
    				//
    				if (ite == pascher.end()||pascher.empty()) pascher.push_back(*tmp);
    				else pascher.insert(++ite, *tmp);//*/
    			}
    		}
    any help?

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Bonjour,
    c'est quoi ton problème?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 103
    Par défaut
    bin justement, j'en sais rien !!! Je sais juste que sa vien de l'iterateur.. j'en utilise jamais ... Ce code est senssé les utiliser pour classer des noeux en sachant que leur poid est senssiblement les mêmes... mais c'est pas le probleme...

    Le probleme pour moi c'est que l'iterateur ne se comporte pas comme je penssai qu'ils se comporterai donc je demande... (j'ai mis un commentaire su la ligne qui plante... )

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Pourquoi ne pas utilise l'alog std::sort???
    http://r0d.developpez.com/articles/algos-stl/

    Sinon ton problème viens de la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (ite != pascher.begin() && (*ite).cost > tmp->cost){// plantage là...
    						MinimalOgreApp::mConsole->print("--");
    						ite--;
    					}
    c'est pas begin(). Mais end() qu'il faut mettre

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 103
    Par défaut
    merci de l'attention ..
    mais non .. le premier while pour placer l'iterateur juste avan un noeux de poid superieur (en parcourant de begin à end), et le second dans le sens inversse jusqu'a trouver un noeux de poid inferieur (ou tomber sur begin/1er element)..

    en fait cette fonction doit etre appelé bcp de foi et comme il saji d'une structure en arbre (c'est un A* adapté) j'aurai voulu fair passer les iterateurs de noeux en noeux pour ne pas parcourir toute la liste mais partir de l'iterateur du noeud parent qui serai positionné sur le poid du parent qui serai a peine plu petit que celui des enfants...

    et je ne veu pas utiliser sort car sa impose de l'appeler à chaque expand de noeux...

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Ops dsl, j'avais pas vu le --.
    Tu peut dans ce cas utiliser le reverse_iterator:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while (ite != pascher.end() && (*ite).cost <= tmp->cost){
    	ite++;
    	MinimalOgreApp::mConsole->print("++");
    }
     
    list <waymap_way>::reverse_iterator rite = ite.base();
    while (rite != pascher.rend() && (*rite ).cost > tmp->cost){
     
    	MinimalOgreApp::mConsole->print("reverse ++");
    	rite++;
    }
    La fonction base sert a passer d'un iterator à un reverse iterator.
    http://www.developpez.net/forums/sho...d.php?t=451033

  7. #7
    Membre éclairé
    Avatar de gb_68
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 232
    Par défaut
    Bonjour,
    .begin retourne un iterateur sur le premier élément de la liste alors que .end retourne un iterateur sur un élément qui serait APRES le dernier élément de la liste (il ne faut donc pas tenter d'accéder à cet élément, en utilisant * ou -> par exemple).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while (ite != pascher.end() && (*ite).cost <= tmp->cost){
    	ite++;
    	MinimalOgreApp::mConsole->print("++");
    }
    // ici ite peut pointer pascher.end() (cf condition de sortie de la boucle)
    // le test ((*ite).cost > tmp->cost) qui suit peut donc faire un accès illégale
    while (ite != pascher.begin() && (*ite).cost > tmp->cost){
    	// En revanche pascher.begin() pointe sur le premier élément de la liste
    	// et ne sera pas testé avec ((*ite).cost > tmp->cost)
    	MinimalOgreApp::mConsole->print("--");
    	ite--;
    }

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

Discussions similaires

  1. Utilisation d'un iterateur sur les listes
    Par JoH28 dans le forum Caml
    Réponses: 14
    Dernier message: 27/12/2008, 21h36
  2. [Smarty] Pbm en ISO-8859-1 sur les pages incluses. Solution sans utiliser UTF8?
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/06/2008, 20h44
  3. Réponses: 7
    Dernier message: 09/06/2008, 20h00
  4. pbm utilisation module
    Par CodeurNé dans le forum Modules
    Réponses: 1
    Dernier message: 20/03/2008, 21h53
  5. pbm d'utilisation de string
    Par assif dans le forum C++
    Réponses: 3
    Dernier message: 21/10/2006, 13h42

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