Ich habe angenommen, dass Iteratoren ihren Operator + und operator überladen haben, um einen Iterator zurückzugeben. Ich auch angenommen, dass Iteratoren Operator int überlastet war(), die die folgende Kompilierung gemacht:Operatoren von std :: iterator
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
std::vector<int>::iterator low = std::lower_bound(v.begin(), v.end(), 2);
int i = low - v.begin();
Aber als ich versuchte, ich habe Fehler einen Compiler anstelle eines int das Ergebnis zu einem Iterator Zuordnung:
std::vector<int>::iterator i = low - v.begin();
Warum führt das Subtrahieren eines Iterators von einem anderen nicht zu einem Iterator?
Ich kann keine Informationen zu cplusplus.com/reference oder irgendwo sonst auf genau finden, was die Schnittstelle eines Iterators enthält.
Was wäre die Semantik eines Iterators, die den Unterschied zweier anderer Iteratoren darstellt? – user888379
Sie sollten den Compilerfehler veröffentlichen. Wenn Subtrahieren von zwei Iteratoren einen Iterator ergibt, dann würden einfache Zeiger (sie * werden als Iteratoren betrachtet), die voneinander subtrahiert werden, einen Zeiger ergeben, der Ihrer Logik entspricht. Aber das ist nicht der Fall. – PaulMcKenzie
Es gibt Distanz-Funktion in return Anzahl der Elemente zwischen zwei Iterator –