2016-11-03 2 views
-1

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.

+5

Was wäre die Semantik eines Iterators, die den Unterschied zweier anderer Iteratoren darstellt? – user888379

+0

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

+1

Es gibt Distanz-Funktion in return Anzahl der Elemente zwischen zwei Iterator –

Antwort

4

"Warum führt das Subtrahieren eines Iterators von einem anderen nicht zu einem Iterator?"

Warum würde das Subtrahieren von 2 Zeigern nicht zu einem anderen Zeiger führen.

Wenn alles, was ich erwarten würde es den Abstand zwischen den zwei Iteratoren in Einheiten enthaltenen Elemente zurück - also ein int

und ein Schnelltest zeigt, dass es die Strecke zurückkehrt

vector<int> test; 
test.push_back(1); 
    test.push_back(2); 
int d = test.begin() - test.end(); 
cout << d; 
return 0; 

sagt : -2

+0

Wenn ich an einen Iterator als Pointer, es macht Sinn, dass die Subtraktion von einem anderen den Abstand zurückgibt, und nicht einen anderen Iterator/Zeiger. Vielen Dank! –

Verwandte Themen