Bonjour,

J'ai un souci pour supprimer un element d'un vecteur.

Contexte: pour masquer la syntaxe parfois lourde ;-) de la STL, j'ai un patron de classe qui me permet d'encapsuler des listes d'objets dans quelque chose de très facile à utiliser

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
class CMaListeDeTrucs : public CMaListe <Truc>
{
}
Mon template (partiel) s'écrit:

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
21
template <class MMMM> class CMaListe 
{
	protected:
		vector<MMMM> v;
	public:
		int GetNb()
		{ return (int)v.size(); }
 
		MMMM GetElem( int i )
		{
			ASSERT( i < v.size() ); // une macro à moi...
			return v[i];
		}
 
		void AddElem( MMMM* elem )
		{ v.push_back( *elem ); }
 
		void List_Clear()
		{ v.clear(); }
...
}
Ceci me permet d'utiliser la liste avec des méthodes qui "masquent" l'utilisation de la STL. Par exemple, je peux faire:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
CMaListeDeTrucs Liste;
CTruc t1, t2;
Liste.AddElem( t1 );
Liste.AddElem( t2 );
int n = Liste.GetNb();
Mon problème se situe alors quand je veux implémenter une méthode de suppression d'un élément, tel que je puisse écrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
int n = FonctionQuiChercheUnTrucParticulier( Liste ); // renvoie l'indice du Truc
Liste.RemoveElem( n );
Là, j'ai un problème dans la définition de cette méthode pour pouvoir supprimer le n-ième élément.

Si j'écrit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
void RemoveElem( int n )
{
  v.erase( n );
}
Ca ne marche pas, il faut fournir un itérateur. Mais comment obtenir la valeur de l'itérateur à partir de la position, exprimée par un 'int' ? Le code suivant ne donne rien non plus:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
void RemoveElem( int n )
{
	std::vector<MMMM>::iterator it = n;
	v.erase( it );
}
J'ai bien lu
http://cpp.developpez.com/faq/cpp/in...ssion_elements
et également sur divers tutos sur le nert, mais je ne trouve rien de pertinent...

Merci de votre aide.