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 :

Boucler sur toutes les paires d'un set


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par défaut Boucler sur toutes les paires d'un set
    Salut,

    Je veux faire une opération ayant besoin des paires d'éléments distincts (comptées une seule fois) dans une set.

    Mon idée de départ était de faire deux boucles d'itérateurs, le deuxième partant de la position suivante de celle où est le premier.

    Malheureusement je n'ai pas trouvé d'opérateur "next()" ou "+1" sur mon itérateur pour amorcer la deuxième boucle. Finalement je me suis rabattu sur une double boucle exhaustive (n*n possibilités) plus un test de supériorité "contenu de l'itérateur1 > contenu de l'itérateur 2" sachant que j'ai une relation d'ordre sur le type des éléments du set...

    Bref ça m'a l'air très sous-optimal. Quelqu'un peut proposer mieux ?

    Merci

  2. #2
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    si tu as de la place, créér 2 sets temporaire l'un que tu vas vider pour chaque truc et l'autre que tu vas remplir au fur et a mesure

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    L'élément suivant s'obtient avec l'opérateur ++, tout simplement !

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par défaut
    Citation Envoyé par Sylvain Togni Voir le message
    L'élément suivant s'obtient avec l'opérateur ++, tout simplement !
    Oui mais l'opérateur ++ modifie la valeur de l'itérateur sur lequel il s'applique :

    Si j'écris :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (iter = monSet.begin(); iter != monSet.end(); iter++)
    { 
    for (iter2 = iter++; iter2 != monSet.end(); iter2++) 
    {
    ...
    }
    }
    j'ai bien peur que ça ne fasse pas ce qu'il faut. Moi ce que je voudraiss c'est iter2 = iter+1

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tnarol Voir le message
    Oui mais l'opérateur ++ modifie la valeur de l'itérateur sur lequel il s'applique
    tout dépend si tu "déréférence" ton itérateur ou non.

    si tu fais ca :
    iter = monSet.begin();
    iter++;

    tu vas juste avancer ton itérateur de une position. d'ailleurs, si tu y prete attention, c'est ce que tu dis de faire à ton for()...


    par contre, si tu fais ca :
    (*iter)++;

    la, effectivement, tu va modifier l'élément pointé par l'itérateur.

    rapelles toi qu'un itérateur peut etre vu comme un pointeur dans bien des cas, ce qui peut aider à la réflexion...

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par défaut
    Citation Envoyé par toxcct Voir le message
    tout dépend si tu "déréférence" ton itérateur ou non.

    si tu fais ca :
    iter = monSet.begin();
    iter++;

    tu vas juste avancer ton itérateur de une position. d'ailleurs, si tu y prete attention, c'est ce que tu dis de faire à ton for()...


    par contre, si tu fais ca :
    (*iter)++;

    la, effectivement, tu va modifier l'élément pointé par l'itérateur.

    rapelles toi qu'un itérateur peut etre vu comme un pointeur dans bien des cas, ce qui peut aider à la réflexion...
    Le problème reste entier...mais je viens de trouver une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for (iter = monSet.begin(); iter != monSet.end(); iter++)
    { 
    iter2 = iter; iter2++;
    for (; iter2 != monSet.end(); iter2++) 
    {
    ...
    }
    }

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par défaut
    Citation Envoyé par hiko-seijuro Voir le message
    si tu as de la place, créér 2 sets temporaire l'un que tu vas vider pour chaque truc et l'autre que tu vas remplir au fur et a mesure
    Mmm ça ne me plait pas, ça fait de la manipulation de données alors que j'ai tout ce que j'ai besoin dans ma liste.

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/06/2014, 19h40
  2. Réponses: 3
    Dernier message: 25/07/2005, 18h41
  3. replace() qui s'applique sur toutes les occurences
    Par Oluha dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/03/2005, 11h27
  4. Réponses: 9
    Dernier message: 07/05/2003, 12h57

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