Da ich weiß, dass ein Iterator im Programm durch eine vorherige Operation ungültig gemacht werden könnte, möchte ich es explizit ungültig machen. Wie z. B. NULL einem Zeiger zuweisen, um es ungültig zu machen, ich möchte nur das gleiche auf Iterator tun. container.end()
könnte hier nicht die genaue Idee sein. Ich habe versucht, meinem Iterator NULL zuzuweisen, aber es ist fehlgeschlagen. Wie kann ich das gleiche Verhalten von NULL-Zeiger auf Iterator bekommen?Wie kann ein Iterator ungültig gemacht werden?
Antwort
Sollte das nicht immer funktionieren? (Iteratoren sind immer zuweisbar und standardmäßig konstruierbar)
template <typename Iter>
void foo(Iter it){
it = Iter(); // invalidate
}
Das ist sehr cool. Ich kann den Iteratortyp direkt erhalten, also ist die Funktion nicht notwendig. Übrigens, ich denke, wir müssen es als Referenz weitergeben, ist das richtig? – Thomson
um es zu ändern, sicher. Dies war nur ein Beispiel. Der einzige Grund, warum ich es zu einer Funktion gemacht habe, war, dass es der einfachste Weg war zu sagen "Angenommen, der Iterator-Typ ist' Iter' und das Iterator-Objekt heißt 'it' ..." :) – jalf
Warum eröffnen Sie bitte wollen container.end()
verwenden ... es funktioniert für die meisten Container ...
für std :: string Möglicherweise möchten Sie überprüfen, ob die Position yourstring.npos
ist?;
durch eine vorherige Operation für ungültig erklärt werden könnte, möchte ich es ausdrücklich
ungültig zu machen ... Wenn Sie wissen, dass es nicht gültig sein kann, dann alles, was Sie es Anschlag zu tun haben, mit ihm . Das Ungültigmachen des Iterators führt explizit nichts aus, da es sich um einen Programmierfehler handelt.
Versuchen Sie, den Umfang Ihres Iterators durch Verwendung zusätzlicher Blöcke zu begrenzen. Außerhalb des Blocks ist der Iterator nicht mehr vorhanden. Das ist besser als ungültig. –
Sie können im Allgemeinen nicht. Es gibt einige Iteratoren, die überhaupt nicht ungültig gemacht werden können. Zum Beispiel kann ein Zufallszahlengenerator als Ausgabe-Iterator modelliert werden, wobei operator*
die aktuelle Zahl zurückgibt und operator++
eine neue erzeugt.
- 1. Wie kann ein Feld in der Naht ungültig gemacht werden?
- 2. Wie kann ein Stylesheet für den Rest der Seite ungültig gemacht werden?
- 3. Flexdruck - Kann es gemacht werden?
- 4. Wie kann eine bestimmte Sitzung beim Abmelden in Rails/w Devise ungültig gemacht werden?
- 5. Wie kann ein Webtest gemacht werden, um Dateidownloads zu akzeptieren?
- 6. Wie kann ein benutzerdefiniertes Steuerelement validatable gemacht werden?
- 7. Wie kann ein Attribut im XML-Schema eindeutig gemacht werden?
- 8. Wie kann ein benutzerdefiniertes Objekt iterierbar gemacht werden?
- 9. Wie kann Djangos DateTimeField optional gemacht werden?
- 10. Kann SyndicationFeed.Load robuster gemacht werden?
- 11. Wie kann dhclient Namespace bewusst gemacht werden?
- 12. Wie kann das gemacht werden, ohne Silverlight?
- 13. Qt :: Wie klein kann es gemacht werden?
- 14. Kann class_alias() rückgängig gemacht werden?
- 15. wie ein Iterator
- 16. Objekt wurde gelöscht oder ungültig gemacht. (Realm)
- 17. NSTimer kann nicht ungültig gemacht werden, wenn er innerhalb des Hintergrundthreads aufgerufen wird
- 18. Wie überprüft man, ob NSTimer bereits ungültig gemacht wurde
- 19. Kann ein side_effect-Iterator simuliert werden, nachdem er erschöpft wurde?
- 20. JPA- und Tabellenansichten. Kann es gemacht werden?
- 21. Kann Folgendes einfacher/effizienter gemacht werden?
- 22. Django Caching - kann es präventiv gemacht werden?
- 23. Kann diese Breitensuche schneller gemacht werden?
- 24. Lazy Modul Variablen - kann es gemacht werden?
- 25. kann sys.exit() gemacht werden, Flaschenrahmen zu verlassen
- 26. Date.now in pass.js kann nicht gemacht werden
- 27. JParallax Scrollbar - Kann es gemacht werden?
- 28. Kann meine Standardabweichungsberechnung effizienter gemacht werden?
- 29. Wie können Cache-Daten [OutputCache] von einem Controller ungültig gemacht werden?
- 30. Wie kann PE 64 für Cygwin ausführbar gemacht werden?
Erstens, ich denke, es ist keine gute Idee zu einem solchen Verhalten. Zweitens können Sie den Zeiger auf den Iterator speichern. – W55tKQbuRu28Q4xv
Wenn du wirklich willst, kann jemand erklären, wie man explizit Undefined Behavior bekommt ;-) – kriss
Warum möchtest du das? Es gibt nichts, was Sie danach mit dem Iterator machen können, was Sie vorher nicht tun konnten. – MSalters