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 :

Suppression d'un element sans iterateur dans un vecteur


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 139
    Par défaut Suppression d'un element sans iterateur dans un vecteur
    J'ai un vecteur de pointeur d'element et je veut pouvoir supprimer un element du vecteur mais je ne connais pas la position de l'element dans le tableau.

    mon vecteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector<C_Organisme*> Tab_Organisme;
    Le probleme c'est que je n'est aucun moyen de differencier un C_Organisme d'un autre, donc je ne peut pas parcourir mon vecteur pour aller supprimer mon C_Organisme.

    Je ne voit pas comment faire.

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut
    Bonjour


    Question bete : Comment tu sais quel element tu veux supprimer ???

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 139
    Par défaut
    en fait dans ma classe process je parcour mon tableau d'organisme. Je prend chaque organisme et je compare ses coordonnée a tous les autres organisme. Si je voit qu'il est en collision alors j'appele la methodeEntre_en_collision de mon organisme et je lui passe en parametre l'organisme avec lequel il est en collision.

    C'est dans la methode Entre_en_collision que je vais determiner quel organisme je vais tuer (donc suprimer de mon vecteur).

    Le probleme c que je ne connais pas sa position dans le vecteur.

    Voila ma boucle de parcour de mon vecteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    for (unsigned int i=0; i < Tab_Organisme.size();i++)
    		{
    			if (Tab_Organisme[i]->DonneEtat() == DEPLACEMENT)
    			{
    				for (unsigned int j = i; j < Tab_Organisme.size();j++)
    				{
    					if (i != j)
    					{
    						if (Detecter_collision(Tab_Organisme[i],Tab_Organisme[j]))
    						{
    							Tab_Organisme[i]->Entre_en_collision(Tab_Organisme[j]);
    						}
    					}
    				}
    			}
    Je sais pas si je suis tres clair dans mes explications...^^

    Tu voit ou je veut en venir?

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 139
    Par défaut
    Peut etre sa eclairera la situation, voila la methode Entre_en_collision :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    void C_Coolphage::Entre_en_collision(C_Organisme * Org)
    {
     
    	//Si le coolphage est majeur et qu'il est en collision avec un hardphage alors il le mange
    	if ((Org->Qui_est_tu() == HARD)&&(this->Sexe != NEUTRE))	
    	{
    		this->Mange(Org);
    	}
    	//Si le coolphage est majeur et qu'il est en collision avec coolphage de sexe opposé alors ils se reproduisent
    	else if ((Org->Qui_est_tu()==COOL)&&(Org->DonneSexe()!=NEUTRE)&&(Org->DonneSexe()!=this->DonneSexe())&&(this->DonneSexe()==NEUTRE))
    	{
    		this->Se_reproduit(Org);
    	}
    	//Si le coolphage est mineur et qu'il est en collision avec un hardphage il se fait mange
    	else if ((this->DonneSexe()==NEUTRE)&&(Org->Qui_est_tu()==HARD))
    	{
    		this->Se_decomposer();
    	}
    }
    et si je rentre dans ma condition se faire manger alors j'appele la methode Se_decomposer de mon objet C_Organisme, et dans cette methode je voudrai le retirer de mon vecteur.

    Voila

    Merci encore

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut
    Re


    La methode se_decomposer elle appartient pas a C_Organisme mais a C_Coolphage, si je lis bien ton code ?
    Comment tu veux que se_decomposer sache quel organisme il faut detruire ? Il faut que tu lui passe l'organisme en parametre...

    Sinon j'ai l'impression que ton tableau d'organisme "Tab_Organisme" est une variable global. Non ? Donc pourquoi ne pas passer tout simplement le numero de l'organisme dans le tableau plutot que le pointeur vers l'organisme (comme ca plus de soucis pour la suppression?).

    Mais si tu prefere continuer a passer le pointeur vers le C_Organisme tu peux toujours parcourir le tableau en comparant les valeurs des pointeurs... Mais ca me semble bien moins propre..

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 139
    Par défaut
    Ah oui j'ai oublier de preciser, la classe C_Coolphage ( et C_Hardphage) herite de C_Organisme. Donc la methode Se_decompose() apartient bien a C_Coolphage.


    Le probleme c'est que mon Tab_Organise n'est pas un variable globale justement, c'est un attribut de ma classe C_Process, je ne sait meme pas comment le recuperer pour le parcourir.

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Si tu sais qu'un organisme rentre en collision avec un autre, tu connais son pointeur, donc tu peux comparer et l'enlever du vecteur.
    Si maintenant, tu ne peux pas faire ça, je pense qu'il vaut mieux que tu revoies l'architecture de ton code.

  8. #8
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    A partir du moment où tu as ton pointeur, un petit erase_remove(_if?) des familles, et c'est fini non ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est aussi ce que je pense...

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/12/2013, 15h51
  2. Suppression d'un element dans une liste
    Par yannoo95170 dans le forum Langage
    Réponses: 10
    Dernier message: 25/11/2012, 19h27
  3. Création de fenêtres sans icone dans la barre des taches
    Par bruce_will dans le forum Windows
    Réponses: 2
    Dernier message: 06/12/2004, 04h29
  4. Réponses: 4
    Dernier message: 02/06/2004, 16h35
  5. [TP]Compiler un prog sans entrer dans TP7
    Par poppels dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 23/10/2002, 18h46

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