Maison >développement back-end >C++ >Comment effacer des éléments d'un `std::list` C à l'aide d'itérateurs inversés ?

Comment effacer des éléments d'un `std::list` C à l'aide d'itérateurs inversés ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-26 08:52:11805parcourir

How to Erase Elements from a C   `std::list` Using Reverse Iterators?

Effacement d'éléments de liste à l'aide d'itérateurs inversés

En C , la fonction d'effacement dans le conteneur std::list attend un paramètre itérateur. Cependant, vous pouvez rencontrer une situation où vous devez supprimer un élément à l'aide d'un itérateur inverse (std::list::reverse_iterator).

Solution :

Selon Selon le standard C, la relation suivante existe entre un itérateur inverse i et son itérateur de base i.base() :

&*(reverse_iterator(i)) == &*(i - 1)

Cela signifie que l'itérateur inverse pointe vers l'élément immédiatement après l'élément pointé par son itérateur de base.

Pour effacer un élément à l'aide d'un itérateur inverse, vous devez appliquer un décalage pour obtenir l'itérateur de base :

m_CursorStack.erase(--(i.base()));

Cette expression décrémente efficacement l'itérateur de base de un, pointant ainsi vers l'élément à effacer.

Supplémentaire Solutions (C 11 et versions ultérieures) :

  • Utilisation de std::next :
m_CursorStack.erase(std::next(i).base());
  • Avancement de l'itérateur inverse :
std::advance(i, 1);
m_CursorStack.erase(i.base());

Ces les solutions sont plus concises et plus claires que l’approche originale. Choisissez celui qui correspond le mieux à vos besoins.

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