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

Qt Discussion :

Un foreach() un peu particulier


Sujet :

Qt

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 18
    Points : 16
    Points
    16
    Par défaut Un foreach() un peu particulier
    Bonjour!
    J'aimerai savoir si un foreach s'adapte à la taille du conteneur qu'on lui passe en entrée, et si non, comment contourner ce problème?

    Par exemple un cas où ma fonction va ajouter des éléments dans ma stringList, est ce que ces éléments passerons dans le foreach?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach( QString str, stringList)
    {
    mafonction(str);
    }
    En espérant avoir été clair

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    Bonjour.

    Un petit coup d’œil dans la documentation :
    Qt automatically takes a copy of the container when it enters a foreach loop. If you modify the container as you are iterating, that won't affect the loop.
    et
    Since foreach creates a copy of the container, using a non-const reference for the variable does not allow you to modify the original container.
    foreach agit sur une copie du conteneur, et modifier ce dernier n'aura d'effet que sur la copie.

    Mais de manière générale, que ce soit avec le foreach de Qt ou une boucle classique, ajouter des éléments dans le conteneur à la volée est un peu risqué.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    A noter que ce mot-clé est déjà ou sera bientôt deprecated https://qt.developpez.com/actu/10339...s-predictible/

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Daïmanu Voir le message
    Un petit coup d’œil dans la documentation :
    Entendu. Est ce que tu as une idée pour réaliser cette manip? Ma fonction est sensée parcourir un fichier texte et collecter des liens vers d'autres fichiers textes, pour les parcourir à nouveau et rechercher d'autres liens, etc..

    @Daimanu: malheureusement j'utilise Qt 5.8 sans possibilité immédiate de passer sur la 5.9 :/

  5. #5
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    On peut contourner le problème à condition de commencer par ne pas utiliser le foreach.
    Il n'existe pas de solution universelle, suivant le type de modification les solutions varient.
    Si on veut par exemple ajouter/enlever un élément à la fin ou au début, ou supprimer un élément déjà parcouru ou l'objet courant, ou ajouter/enlever un élément juste après/juste avant l'élément courant. On a des solutions basées sur l'utilisation d'itérateurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for ( QStringList::iterator it = stringList.begin() ; it != stringList.end() ; ) {
        QString& str = *it;
        if ( on_a_besoin_de_modifier_la_liste ) {
            ...
            it = ...; // on a modifié la liste, la prochaine itération sera ...
        }
        else {
            ++it; // on n'a rien changé, le suivant est juste après
        }
    }
    Il existe des cas très simple, et d'autres plus complexes pour la valeur à affecter à 'it'. Quel est le tien?

    On peut aussi utiliser la solution : On crée autre liste, pendant le parcours on remplit cette liste, à la fin on remplace l'original par l'autre liste.

Discussions similaires

  1. [XSLT]Tableau un peu particulier
    Par JohnBlatt dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 21/06/2006, 18h14
  2. Un tri un peu particulier
    Par GregPeck dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/06/2006, 15h32
  3. Menu un peu particulier avec des onmouseover
    Par Jinroh77 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/02/2006, 14h30
  4. #define un peu particulier
    Par greuh dans le forum C
    Réponses: 14
    Dernier message: 12/10/2005, 16h42
  5. Réponses: 2
    Dernier message: 05/01/2004, 11h23

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