Plusieurs choses:
- Évite l'utilisation de using namespace, voir:
[ Lien ]
- Tu fais une copie inutile dans ton code: list<list<Node*> > lnodes = g.l_nodes;. C'est assez violent parce que tous est recopié ! Un pointeur ou une référence dessus aurait été plus souhaitable, voir d'utiliser directement g.l_nodes.
- Ou est le "return", qui est super important pour chainer des actions ? (Sûrement la cause de ton bug).
- Attention, grosse différence de performance entre ++i et i++ sur un objet iterator !!! L'un incrémente (++i) et l'autre recopie puis somme la copie et l'élément courant (i++ <=> i = i.copie() + 1 si tu préfères);. Prend la bonne habitude de faire ++i, si tu as le choix entre ++i et i++. Tu ne te tromperas ainsi jamais, quelque soit le type de donnée.
- Quand on redéfini un opérateur de flux, on utilise le flux courant, et non std::cout.
Code C/C++ :
std::ostream& operator<<(std::ostream& out, const Graph &g)
{
typedef list<list<Node*> >::iterator iter;
typedef list<Node*>::iterator subIter;
for (iter i = g.l_nodes.begin(); i != g.l_nodes.end(); ++i)
for (subIter j = i->begin(); j != i->end(); ++j)
out << **j;
out << endl;
return out;
}
std::ostream& operator<<(std::ostream& out, const Node &n)
{
out << "[Value : "<< n.getValue() << ", Color : " << n.getColor() << ", @ :" << &n << "]";
return out;
}
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question