Bonjour à tous,
en faite, j'ai un problème concernant les vecteurs de pointeurs,
Dans une méthode "Get_Objects_Coverd_P"
Je fais un parcours sur un vecteur de pointeurs "table" qui sont des objets possedant un nom ,un min et un max. Parmi les objets stockés, je voulais récupérer les objets qui sont inclus dans un objet P bien défini (c'est à dire ,la borne inf d'un objet est >= à lla borne inf de P et la borne sup d'un objet est <= par rapport à P)
les objets retenus sont stockés dans un nouveau vecteur de pointeurs qui s'appelle "Template_Object_Covered_P". et doivent être suuprimés du vecteur "table".
j'ai utilisé erase pour les effacer mais ça fonctionne pas.les objets ne s'effacent pas.
par contre quand j'applique ça dans main sans passer par une méthode ça marche.
A votre avis ,est ce que c'est à cause que je travaille sur des pointeurs???
Aidez moi
ci dessous le code :

Code c++ : 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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
 
 /*************************************Objets Couverts par P**************************************************************/
vector<Object*> Get_Objects_Coverd_P(vector<Object*>table){
vector<Object*>Template_Object_Covered_P; 
Object* OD;
Object* P;
int ind_p;
 
/***********************************Recherche de l'objet dominant*********************************************************/
OD = table.front();   
cout <<"L'objet dominant est : "<<OD ->Get_Name()<<endl; 
 
/***************************************Recherche d'un objet en intersection partielle avec l'objet dominant**************/ 
P = Get_P(table);  // P est déjà calculé
 
/*************************Recherche des objets couverts par l'objet P ****************************************************/ 
if(P!=NULL){
/**************************On cherche dans la liste initiale**************************************************************/
Template_Object_Covered_P.clear();
for(ind_p=1;ind_p<table.size();ind_p++){
  if((table[ind_p]->Get_Min()>=P->Get_Min()) && (table[ind_p]->Get_Max()<=P->Get_Max())){
    Template_Object_Covered_P.push_back(table[ind_p]);
    table.erase(table.begin()+ind_p);     // Le problème est ici
    ind_p--;
  }
}
return Template_Object_Covered_P;
}
}
 
 
 
 
/******************************************************MAIN********************************************************/
int main()
{
  char fileName [LGMAX_FILE_NAME + 1] ;
  string name;
  int min, max;
  bool istemplate;
  int nb_objects=0;
  int i;
  string Z_String ;
  vector<Object*> table_objects;
  vector<Object*> objects_covered_P;
 
 
  /**************Lecture des informations dans le fichier qui contient les noms des objets leurs Xmin et leurs Xmax************/
  cout << "name of the file : " ;
  cin >> setw (LGMAX_FILE_NAME) >> fileName ;
  ifstream entree (fileName, ios::in|ios::binary) ;   // ou ios::in
  if (!entree) { cout << "Error: can not open the file " << fileName <<endl ;
                 exit (-1) ;
               }
 
  while(!entree.eof())
  {
  	entree >> name;
  	entree >> min;
  	entree >> max;
	if(name == "*") break;
	else
  	cout << "name: " << name << " min: " << min << " max: " << max << endl ;
	table_objects.push_back(new Object(name,min,max,false));
  	nb_objects++;
  }
 
  entree.close () ;
  cout << "**************************************************************\n";
  cout << " Voici les noms, les min, les max des objets de votre image \n";
  cout << "**************************************************************\n";
  cout << "Nb objects: " << nb_objects << endl;
 
 
for(i= 0; i< nb_objects;i++){
     cout<<table_objects[i]->Get_Name()<<"\t"<<table_objects[i]->Get_Min()<<"\t"<<table_objects[i]->Get_Max()<<"\n";
}
cout << "Taille du vecteur d'objets: " << table_objects.size()<<"\n";
 
objects_covered_P = Get_Objects_Coverd_P(table_objects);
cout<<"les objets couverts par P sont :"<<endl;
for(int y=0;y<objects_covered_P.size();y++)
   cout<<objects_covered_P[y]->Get_Name()<<"\t";
cout<<endl;
 
 
/*for(int z=0;z<table_objects.size();z++){
table_objects.erase(table_objects.begin()+z);
z--;
}
cout<<endl;*/
 
cout<<"Table Objects contient :"<<endl;
for(int k=0;k<table_objects.size();k++)
   cout<<table_objects[k]->Get_Name()<<"\t";
cout<<endl;
}