Puisque je sais qu'un itérateur dans le programme a pu être invalidé par une opération précédente, je veux l'invalider explicitement. Tels qu'affecter NULL à un pointeur pour l'invalider, je veux juste faire la même chose sur itérateur. container.end()
ne pouvait pas être l'idée précise ici. J'ai essayé d'assigner NULL à mon itérateur, mais il a échoué. Comment puis-je obtenir le même comportement du pointeur NULL sur itérateur?Comment invalider un itérateur?
Répondre
Cela ne devrait-il pas toujours fonctionner? (les itérateurs sont toujours assignables et par défaut constructibles)
template <typename Iter>
void foo(Iter it){
it = Iter(); // invalidate
}
C'est très cool. Je peux obtenir le type d'itérateur directement, donc la fonction est inutile. Soit dit en passant, je pense que nous devons le transmettre par référence, n'est-ce pas? – Thomson
afin de le modifier, bien sûr. C'était juste un exemple. La seule raison pour laquelle je l'ai fait fonctionner était que c'était la manière la plus simple de dire "En supposant que le type d'itérateur est' Iter' et que l'objet d'itération s'appelle 'it' ..." :) – jalf
Pourquoi ne pas vous voulez utiliser container.end()
... cela fonctionne pour la plupart des conteneurs ...
Pour std :: string Vous pouvez vérifier, wether la position est yourstring.npos
?;
pourrait être invalidée par quelque opération précédente, je veux annuler explicitement
... Si vous savez qu'il ne peut pas être valide, tout ce que vous devez le faire cesser de l'utiliser . Invalider l'itérateur n'effectue explicitement rien, car l'utiliser est une erreur de programmation de toute façon.
essayez de limiter la portée de votre itérateur en utilisant des blocs supplémentaires. En dehors du bloc, l'itérateur n'est plus là. C'est mieux que non valide. –
Vous ne pouvez pas, en général. Il y a quelques itérateurs qui ne peuvent pas être invalidés du tout. Par exemple, un générateur de nombres aléatoires peut être modélisé comme un itérateur de sortie, operator*
renvoyant le nombre actuel et operator++
générant un nouveau.
- 1. Comment invalider correctement un NSTimer
- 2. Comment utiliser un itérateur?
- 3. comment initialiser un itérateur
- 4. Comment invalider un champ en couture?
- 5. comment appeler un itérateur sur un hashmap
- 6. Comment insérer dans un vecteur imbriqué sans invalider l'itérateur (s)
- 7. retourner un itérateur
- 8. Timer invalider
- 9. Comment puis-je incrémenter un itérateur vectoriel?
- 10. Comment adapter un itérateur défini pour qu'il se comporte comme un itérateur de carte?
- 11. ASP.NET - Invalider navigateur cache
- 12. Python: itérateur d'arbre binaire sans itérateur
- 13. Android: Comment invalider plusieurs parties de l'écran
- 14. Android - drawText invalider
- 15. Comment invalider une session POJO de couture
- 16. Comment convertir un générateur ou un itérateur en liste récursive
- 17. Itérateur générique
- 18. Invalider ou ajouter du texte
- 19. Invalider NSTimer ne fonctionne pas
- 20. Si un itérateur python renvoie des objets itératifs, comment puis-je chaîner ces objets dans un grand itérateur?
- 21. En C++, comment obtenir un index int d'un itérateur?
- 22. Comment garder un itérateur déréférenciable lorsque son vecteur est ajouté?
- 23. Comment construire un itérateur std :: list en boucle avec incrément
- 24. Comment étendre un itérateur de recherche binaire consommer plusieurs cibles
- 25. comment passer un itérateur Ruby en tant que paramètre?
- 26. Comment créer un générateur/itérateur avec l'API Python C?
- 27. Comment surcharger l'opérateur-> sur un itérateur "générateur"?
- 28. invalider un cookie lors d'un changement de mot de passe
- 29. Python paresseux itérateur
- 30. itérateur personnalisé: comment en garder la trace?
D'abord, je pense que ce n'est pas une bonne idée d'un tel comportement. Deuxièmement, vous pouvez stocker le pointeur vers l'itérateur. – W55tKQbuRu28Q4xv
Si vous voulez vraiment quelqu'un peut également expliquer comment obtenir comportement Undefined explicitement ;-) – kriss
Pourquoi voudriez-vous cela? Il n'y a rien que vous puissiez faire avec l'itérateur après ce que vous ne pouviez pas faire auparavant. – MSalters