Bonjour,
Je travaille en ce moment sur un petit logiciel C++ très simple.
En bref, j'ai défini une structure "humain" contenant des informations, et un vector contenant des "humain".
Un des attributs des humains est leur santé (type entier). Quand elle est à 0, je veux pouvoir supprimer de mon vecteur ces humains.
j'ai créé une fonction que j'appelle après toute opération pouvant influer sur la santé.
La voici :
Ma variable comptabilise bien le nombre de décès, seulement après affichage de ma structure je constate que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 void deces(vector<humain> populationHumaine){ int nbDeces = 0; for(unsigned int i = 0; i < populationHumaine.size(); i++){ if(populationHumaine[i].sante == 0){ populationHumaine.erase(populationHumaine.begin()+i); nbDeces++; } } cout << "Il y a eu " << nbDeces << " deces" << endl << endl; }
1) Il y a encore les humains "morts" dans mon vector
2) La taille de mon vector n'a pas changé.
J'ai d'abord pensé à une erreur de pointeurs, mais je n'ai rien trouvé.
J'ai lut sans vraiment comprendre que les itérateurs du vector allaient devenir obsolète puisque la taille du vecteur change. Or, je n'ai pas de message d'erreur ou de dépassement de taille puisque la suppression n'est même pas effectuée.
Si quelqu'un pouvait m'aider, ce serait très aimable.
Cordialement,
EDIT :
En fait je viens de m'aperçevoir d'une autre curiosité :
Cette portion de cote, testée de manière fixe sur un échantillon de 10 personnes me renvoit qu'il n'y a eu que 6 décès et non pas 10 comme il devrait y en avoir normalement puisque la condition a sautée. Bien entendu, le vector fait toujours la même taille à l'affichage, et a le même contenu !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for(unsigned int i = 0; i < populationHumaine.size(); i++){ populationHumaine.erase(populationHumaine.end()); nbDeces++; }
Partager