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
Mon template (partiel) s'écrit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 class CMaListeDeTrucs : public CMaListe <Truc> { }
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
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(); } ... }
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
3
4
5 CMaListeDeTrucs Liste; CTruc t1, t2; Liste.AddElem( t1 ); Liste.AddElem( t2 ); int n = Liste.GetNb();
Là, j'ai un problème dans la définition de cette méthode pour pouvoir supprimer le n-ième élément.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int n = FonctionQuiChercheUnTrucParticulier( Liste ); // renvoie l'indice du Truc Liste.RemoveElem( n );
Si j'écrit:
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 void RemoveElem( int n ) { v.erase( n ); }
J'ai bien lu
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 ); }
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.
Partager