STL/vector : conversion indice : "int" en iterateur
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:
1 2 3
| class CMaListeDeTrucs : public CMaListe <Truc>
{
} |
Mon template (partiel) s'écrit:
Code:
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:
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:
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:
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:
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.