1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| int CPeople::CheckAssociation(vector<CBox::MyPoints> &MonVecteur)
{
int NumberOfPoint = MonVecteur.size();
if (MyPeople.empty())
{
NotAssociate(MonVecteur,NumberOfPoint);
}
else
{
for (vector<people>::iterator it=MyPeople.begin(); it!=MyPeople.end();)
{
// Cette fonction ne fait qu'éventuellement mettre à jour mon vecteur, elle ne va pas ajouter ou supprimer d'éléments
int detect = Search(*it,MonVecteur,NumberOfPoint);
// Cette boucle if est le seul endroit ou je suis amené á supprimer des éléments de mon vecteur.
if (detect==0)
{
people p;
p = *it;
int x = p.X_PredictPoint ;
int y = p.Y_PredictPoint ;
if ( (x<=MARGE_X_LEFT) || (x>=MARGE_X_RIGHT) || (y<=MARGE_Y_BOTTOM) || (y>=MARGE_Y_TOP) )
{
it = MyPeople.erase(it);
}
else
{
UpdatePeople(p,x,y);
++it;
}
}
else ++it;
}
// Cette fonction n'est plus dans la boucle, donc pas de problème pour l'itérateur
NotAssociate(MonVecteur,NumberOfPoint);
}
return 0;
} |