STL - list : doit contenir uniquement des objets dynamiques ?? [C++] - C++ - Programmation
Marsh Posté le 14-03-2007 à 18:09:43
Salut,
Si ça peut correspondre à ta classe, c'est à dire que le nom serait une clé décidant de l'égalité entre 2 objets de type A, il faut que tu redéfinisses l'opérateur== dans A, et que tu passes à find un objet doté de l'attribut nom voulu.
Edit: sinon, il faut que tu itères à la main et que tu regardes pour chaque itération si le nom est celui cherché.
Marsh Posté le 14-03-2007 à 18:15:19
Salut,
Ben, a mon avis tu n'a pas le choix : tu doit parcourir toute ta liste et ensuite comparer les éléments a la chaine que tu cherche.
donc un truc du type :
Code :
|
[edit] grillé car je met 3h a poster 3 lignes Sinon, c'est clair que ça me parait plus propre de définir l'opérateur == et d'ensuite utilisé les algorithmes de la STL...
Marsh Posté le 19-03-2007 à 17:30:30
up...
Une list de la stl doit-elle obligatoirement contenir des objets "dynamiques" ?
Marsh Posté le 19-03-2007 à 17:54:36
Non, du tout -std::list<int> marche très bien par exemple>. Tu as des erreurs pour intégrer des variables créées sur la pile?
Marsh Posté le 19-03-2007 à 18:03:09
non, pas encore du moins ... j'etais juste dans la phase de conception des classes ...
Marsh Posté le 19-03-2007 à 22:26:04
Amonchakai a écrit : Salut, donc un truc du type :
[edit] grillé car je met 3h a poster 3 lignes Sinon, c'est clair que ça me parait plus propre de définir l'opérateur == et d'ensuite utilisé les algorithmes de la STL... |
seulement si c'est effectivement le sens de l'égalité. Sinon un pauvre foncteur et ça se fait tout seul. Avec search/find_if ça se fait tout simplement.
Marsh Posté le 19-03-2007 à 23:20:55
Code :
|
genre style
Marsh Posté le 20-03-2007 à 07:13:01
Bonjour,
Je me pose une question : ça ne risque pas de planter ce que tu as fait ?
Je m'explique : le retour du find_if() peut être foos.end() si il ne trouve pas l'élément cherché, et donc le ->name devrais déclancher une erreur non ? On aurai pas du plutôt comparer l'itérateur à foos.end() ?
Marsh Posté le 20-03-2007 à 08:39:39
bah oui et non. Vu que je suis niveau 70, quand je mets un "plop" dans une liste, il y est, donc je le retrouve. Maintenant dans le cas général, il faut évidemment comparer en premier l'iterator retourné avec .end().
Marsh Posté le 14-03-2007 à 18:01:11
bonjour,
Soit une classe A qui contient en private un "string nom", et un "int age", et en public les methodes d'acces aux attributs.
J' utilise une liste qui contient des élements de type classe A.
Comment puis-je faire une recherche sur le nom dans cette liste à partir d'une chaine string ?
J'ai essayé ça mais ca ne fonctionne pas:
...rechercher(string m)
{
mon_iterateur = find (maliste.begin()->getNom(), maliste.end()->getNom(), m)
...
}
??
Merci
Message édité par gentlefred le 19-03-2007 à 17:31:20