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 :

Vector iterator incompatible


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre habitu�
    Homme Profil pro
    �tudiant
    Inscrit en
    Juillet 2021
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 7
    Par d�faut Vector iterator incompatible
    Bonsoir,

    J'ai un probl�me concernant ce programme : Nom : 28imG.png
Affichages : 447
Taille : 33,9 Ko

    J'aimerais comprendre pourquoi le while sur la liste L fonctionne correctement alors que celui avec le vecteur V ne fonctionne pas. Sachant que les deux codes sont "identiques", je ne vois vraiment pas pourquoi il y a un probl�me de compatibilit�.

    Le contexte : J'ai une liste L et un vecteur V et j'aimerais transf�rer toutes les filles de la liste et du vecteur vers un nouveau vecteur TD.

    Merci d'avance.

  2. #2
    Expert confirm�
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par d�faut
    C'est ultra logique
    std::vector::erase, documentation cplusplus.com en anglais

    1 vecteur est 1 stockage contigu� en m�moire. Donc s'il y a reallocation, tes it�rateurs sont invalides.
    1 liste cha�n�e ce sont des maillons avec 1 syst�me de pointeurs "suivant"/ "pr�c�dent" (<- lire la documentation std::list::erase pour confirmer)

  3. #3
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    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 599
    Par d�faut
    Bonjour,

    L'objet list<> est en effet une des rares collections qui peut �tre parcourue et modifi�e en m�me temps.

    On peut cependant le faire sur les vector<> par une toute petite modification de ton code (la fonction erase() retourne quelque chose � utiliser). Mais je ne peux pas agir sur une copie d'�cran.

  4. #4
    Membre habitu�
    Homme Profil pro
    �tudiant
    Inscrit en
    Juillet 2021
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 7
    Par d�faut
    Merci pour vos r�ponses.

    voici le code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	itV = V.begin();
    	while (itV != V.end())
    	{
    		if ((*itV).get_sexe() == 'F')
    		{
    			TD.push_back(*itV); itTEMP2 = itV;
    			itV++;
    			V.erase(itTEMP2);
    		}
    		else { itV++; }
    	}
    Que dois-changer pour que �a fonctionne?
    Merci d'avance.

  5. #5
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    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 599
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        itV = V.begin();
        while ( itV != V.end() ) {
            if ( itV->get_sexe() == 'F' ) {
                TD.push_back( *itV );
                itV = V.erase( itV );  // erase retourne le prochain iterateur, et il est garanti valide
            }
            else {
                ++itV;
            }
        }

  6. #6
    Membre habitu�
    Homme Profil pro
    �tudiant
    Inscrit en
    Juillet 2021
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 7
    Par d�faut
    Merci beaucoup !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. vector : iterator.. besoins d'une petite pr�cision
    Par italiasky dans le forum SL & STL
    R�ponses: 2
    Dernier message: 18/11/2008, 10h37
  2. R�ponses: 10
    Dernier message: 30/06/2008, 19h59
  3. pair, vector, iterator et type_traits
    Par NiamorH dans le forum SL & STL
    R�ponses: 7
    Dernier message: 21/02/2008, 18h56
  4. R�ponses: 2
    Dernier message: 07/12/2007, 02h19
  5. Template - vector - iterator
    Par jmeuf dans le forum Langage
    R�ponses: 6
    Dernier message: 30/03/2007, 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