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 :

std::vector et erase


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut std::vector et erase
    Bonjour, je souhaite supprimer d'un vector tous les éléments nuls. J'ai donc fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      vector<double>::iterator it = v.begin();
      while(it != v.end())
      {
    	if(fabs(*it) < 1e-10) // on supprime tous les 0
    		v.erase(it);
    	else
    		it++;
      }
    Arrivé au 1e zéro, la suppression est correctement effectuée, mais lorsqu'on passe à l'itération d'après, il crash au test while(it != v.end())


    Pourqouoi est-ce que v.end() n'est pas réévaluer à chaque passage ? Comment faire ?

    Merci d'avance

  2. #2
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    après le erase, ton iterateur est invalide. Heuresement vector::erase renvoie un iterateur qui va bien. Il faut donc faire

    et cela devrait fonctionner

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    OK merci !

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

Discussions similaires

  1. std vector erase sur un range d'éléments
    Par Muska17 dans le forum C++/CLI
    Réponses: 2
    Dernier message: 08/09/2014, 11h04
  2. char[50] et std::vector<>
    Par tut dans le forum SL & STL
    Réponses: 9
    Dernier message: 12/10/2004, 13h26
  3. Réponses: 8
    Dernier message: 26/08/2004, 18h59
  4. Sauvegarde std::vector dans un .ini
    Par mick74 dans le forum MFC
    Réponses: 2
    Dernier message: 12/05/2004, 13h30
  5. vector et erase()
    Par gytr2 dans le forum SL & STL
    Réponses: 6
    Dernier message: 02/03/2004, 12h45

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