2 Stimmen

Wie kann man einen Iterator ungültig machen?

Da ich weiß, dass ein Iterator im Programm durch eine frühere Operation ungültig gemacht werden könnte, möchte ich ihn explizit ungültig machen. Wie NULL zu einem Zeiger zuweisen, um es ungültig zu machen, möchte ich einfach das gleiche auf Iterator tun. container.end() könnte hier nicht die genaue Idee sein. Ich habe versucht, NULL zu meinem Iterator zuzuweisen, aber es ist fehlgeschlagen. Wie kann ich das gleiche Verhalten von NULL-Zeiger auf Iterator erhalten?

4voto

Karl Knechtel Punkte 55450

durch eine frühere Operation ungültig gemacht werden könnte, möchte ich sie ausdrücklich ungültig machen

... Wenn Sie wissen, dass sie möglicherweise nicht gültig ist, dann müssen Sie nur Folgendes tun es nicht mehr verwenden . Das explizite Ungültigmachen des Iterators bringt nichts, da seine Verwendung so oder so ein Programmierfehler ist.

2voto

Juarrow Punkte 2097

Warum wollen Sie nicht die container.end() ?... es funktioniert für die meisten Container...

Bei std::string sollten Sie prüfen, ob die Position yourstring.npos ;

1voto

MSalters Punkte 166675

Im Allgemeinen kann man das nicht. Es gibt einige Iteratoren, die überhaupt nicht ungültig gemacht werden können. Zum Beispiel kann ein Zufallszahlengenerator als Ausgabe-Iterator modelliert werden, mit operator* die Rückgabe der aktuellen Nummer und operator++ eine neue zu erstellen.

1voto

jalf Punkte 235501

Sollte das nicht immer funktionieren? (Iteratoren sind immer zuweisbar und standardkonfigurierbar)

template <typename Iter>
void foo(Iter it){
  it = Iter(); // invalidate
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X