Disons que j'ai:est le « == » opérateur qui doit être défini pour utiliser std :: trouver
class myClass
std::list<myClass> myList
où myClass ne définit pas l'opérateur == et ne se compose des champs publics.
Dans les deux VS2010 et VS2005 ce qui suit ne compile pas:
myClass myClassVal = myList.front();
std::find(myList.begin(), myList.end(), myClassVal)
se plaindre du manque d'opérateur ==.
J'ai naïvement supposé qu'il ferait une comparaison de valeur des membres publics de l'objet myClass, mais je suis presque certain que ce n'est pas correct.
Je suppose que si je définis un opérateur == ou si j'utilise un foncteur à la place, cela résoudra le problème. Sinon, si ma liste contenait des pointeurs au lieu de valeurs, la comparaison fonctionnerait.
Est-ce exact ou devrais-je faire autre chose?
Si votre liste contenait des pointeurs, 'std :: find' comparerait bien sûr des pointeurs, pas des valeurs. Par conséquent, vous ne trouverez jamais '& myClassVal'. – MSalters
droit, car il pointe vers la mémoire locale qui ne figure pas dans la liste. THX. –