J'écris du code multiplateforme entre Windows et Mac. Si list :: end() "renvoie un itérateur qui adresse l'emplacement suivant le dernier élément d'une liste" et qui peut être vérifié lors de la traversée d'une liste, quel est le meilleur moyen de reculer?Comment faire une itération arrière dans une liste STL?
Ce code workson le Mac, mais pas sous Windows (ne peut pas décrémenter au-delà de premier élément):
list<DVFGfxObj*>::iterator iter = m_Objs.end();
for (iter--; iter!=m_Objs.end(); iter--)// By accident discovered that the iterator is circular ?
{
}
cela fonctionne sous Windows:
list<DVFGfxObj*>::iterator iter = m_Objs.end();
do{
iter--;
} while (*iter != *m_Objs.begin());
Y at-il une autre façon de traverser vers l'arrière que pourrait être mis en œuvre dans une boucle for?
Ce serait seulement un accident de mise en œuvre que votre premier exemple (l'itérateur circulaire, comparant avec end()) fonctionnerait. – Justsalt