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é ?

Comment effacer en toute sécurité des éléments d'un conteneur STL à l'aide d'un itérateur inversé ?

Patricia Arquette
Libérer: 2024-11-23 05:00:09
original
534 Les gens l'ont consulté

How to Safely Erase Elements from an STL Container Using a Reverse Iterator?

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 :

  • std::next(i).base(): Cela renverra l'itérateur de base correspondant à l'élément suivant dans le séquence.
  • std::advance(i, 1); i.base() : Cela avancera l'itérateur inverse d'un et renverra l'itérateur de base correspondant à sa position actuelle.

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;
  }
}
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal