Partage
  • Partager sur Facebook
  • Partager sur Twitter

Itérateur dans une boucle "for"

Sujet résolu
    1 octobre 2008 à 19:18:48

    Bonjour, bonsoir,

    J'aimerais un conseil sur la façon de coder une boucle, qui, si un objet vérifie une condition, l'élimine d'un vector et fait pointer l'itérateur sur l'élément précédent et non pas suivant comme la fonction "erase" le fait. J'y tiens car à la fin d'une itération de la boucle, l'itérateur est incrémenté, ce qui ferait "sauter" un des objet. Voila ce que j'ai trouvé, mais cela me parait très moche :

    for(std::vector<T>::iterator i = m_vector.begin(); i != m_vector.end(); ++i) {
        if(i->condition())
            std::vector<T>::iterator k;
            k = m_vector.erase(i);
            --k;
            i=k;
        }
    }
    


    Si quelqu'un a une meilleure solution, je suis preneur (et s'il n'en existe pas je serai intéressé de le savoir).
    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      1 octobre 2008 à 19:26:03

      Les gens cherchent toujours au plus compliqué. Pourquoi vouloir annuler l'effet d'une incrémentation, plutôt que de ne pas la faire du tout ?

      for(std::vector<T>::iterator i = m_vector.begin(); i != m_vector.end(); )
      {
          if (i->condition())
              i = m_vector.erase(i);
          else
              ++i;
      }
      


      (cette solution était dans la FAQ de developpez.com)
      • Partager sur Facebook
      • Partager sur Twitter
        1 octobre 2008 à 19:44:54

        Effectivement :euh: , merci.

        (sujet résolu)
        • Partager sur Facebook
        • Partager sur Twitter

        Itérateur dans une boucle "for"

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown