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
Barbara Streisandoriginal
2024-11-30 18:55:14491parcourir

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;
    }
}

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() );

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() );

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!

Déclaration:
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