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) :
m_CursorStack.erase(std::next(i).base());
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!