Maison > développement back-end > C++ > Comment puis-je effacer un élément d'une liste à l'aide d'un itérateur inversé en C ?

Comment puis-je effacer un élément d'une liste à l'aide d'un itérateur inversé en C ?

Barbara Streisand
Libérer: 2024-11-30 18:55:14
original
531 Les gens l'ont consulté

How Can I Erase an Element from a List Using a Reverse Iterator in C  ?

Effacer un élément d'une liste à l'aide d'un itérateur inverse

Il est possible de rencontrer un scénario où vous souhaitez supprimer un élément d'une list en utilisant un itérateur inverse, mais la fonction delete() n'accepte qu'un itérateur normal. Cela peut poser un défi, car convertir un itérateur inversé en itérateur régulier n'est pas simple.

Solution :

La clé pour résoudre ce problème réside dans la compréhension de la relation entre un itérateur inverse et son itérateur de base. Selon la norme C, l'itérateur de base d'un itérateur inverse i est &*(i - 1). Cela signifie que pour obtenir l'itérateur de base, on décrémente i.

Exemple :

Considérons l'extrait de code suivant :

for ( std::list< Cursor::Enum & >::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i )
{
    if ( *i == pCursor )
    {
        m_CursorStack.erase( --(i.base()) );
        break;
    }
}
Copier après la connexion

Dans ce Par exemple, l'itérateur de base est obtenu en décrémentant i.base(). En passant cet itérateur de base à la fonction Eraser(), nous pouvons réussir à supprimer l'élément souhaité de la liste.

Solutions C 11 :

Pour C 11 et versions ultérieures , deux solutions supplémentaires sont disponibles :

  1. Utiliser std::next():
m_CursorStack.erase( std::next(i).base() );
Copier après la connexion

Cette solution reste inchangée, tandis que std::next() est utilisée pour avancer l'itérateur inverse d'une position, récupérant efficacement son itérateur de base .

  1. Avancer l'inverse Itérateur :
std::advance(i, 1);
m_CursorStack.erase( i.base() );
Copier après la connexion

Dans cette solution, l'itérateur inverse est avancé d'une position à l'aide de std::advance(), qui aligne efficacement son itérateur de base avec l'élément souhaité pour l'effacement.

Quelle que soit la solution que vous choisissez, ces approches fournissent des méthodes claires et simples pour effacer des éléments d'une liste à l'aide d'un itérateur inverse.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal