Bonjour,

j'ai un problème avec les itérateurs de vector. Mon code de base est trop long pour que je le mette ici. Je vous donne donc un exemple qui explique le problème

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
for(vector<int>::iterator i=v.begin();i!=v.end();)
{
  cout<<*i<<endl;
  if(*i==0)
    v.push_back(5);
 
  if(*i=2)
   v.erase(i)
 else
  i++
}
C'était mon idée de départ. elle ne marche pas car d'après ce que j'ai trouvé sur le net lorsque que l'on fait un push_back tous les iterator sont modifies et deviennent invalide.


J'ai donc fait comme suit

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
for(unsgined int i=0;i<v.size();)
{
  cout<<i<<v.at(i)<<endl;
  if(v.at(i)==0)
    v.push_back(5);
 
  if(v.at(i)==2)
    v.erase(v.begin()+i);
 else
   i++
}
Cependant ce code ne fonctionne pas non plus. Il déclenche une erreur de lecture illegal après un erase pour un élément issue du push_back.

Je sais pas si j'ai été clair. N'hésitez pas à me demander plus d'information.

Merci