Maison >développement back-end >C++ >Comment effacer en toute sécurité des éléments d'un conteneur STL à l'aide d'un itérateur inversé ?
Suppression d'un élément à l'aide d'un itérateur inverse
Lorsque vous travaillez avec des conteneurs STL, effacer un élément à l'aide d'un itérateur inverse peut poser un défi. Par défaut, la fonction d'effacement attend un itérateur, pas un itérateur inverse.
Pour résoudre ce problème, il existe plusieurs approches :
1. Obtention de l'itérateur de base :
La norme définit une relation entre un itérateur inverse (i) et son itérateur de base correspondant (i.base()) comme &*(reverse_iterator(i)) == & *(i-1). Cela signifie que vous pouvez obtenir l'itérateur de base en appliquant --() à i.base().
2. Solutions spécifiques à C 11 :
En C 11, vous disposez de deux options supplémentaires :
Exemple de code :
for (std::list<Cursor::Enum>::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i) { if (*i == pCursor) { // C++11 solution m_CursorStack.erase(std::next(i).base()); // Alternatively, for pre-C++11 or if desired: m_CursorStack.erase(--(i.base())); break; } }
En suivant ces approches, vous pouvez effacer efficacement un élément d'une liste à l'aide d'un itérateur inverse tout en respectant les exigences de la norme. exigences.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!