[Gelöst] Iteratorarithmetik
-
Hallo
Ich hätte da eine Frage bezüglich Iteratorarithmetik.
Im (C++ Primer Übung 3.22) heisst es:
Was geschieht, wenn wir mid folgendermassen berechnen:
vector<int>::iterator mid = (vi.begin() + vi.end()) / 2;
Ich habe einen Vektor mit 9 Elementen erstellt und verschiedene Versuche durchgeführt einem Iterator solch einen Wert durch so eine arithmetische Operation zu vergeben, aber der Compiler gibt da eine sehr lange Fehlermeldung raus. (...error: no math for 'operator+'...).
Andere Operationen wie (vi.begin()+2, vi.end()-4...) funktionieren sehr gut.
Ist es normal dass das so überhaupt nicht funktioniert, oder mache ich da etwas falsch.
Wäre sehr dankbar wen mir jemand da helfen kann
Gruss
-
Du kannst Iteratoren und Zeiger nicht dividieren.
Einen Iterator in die Mitte kriegst du mit:
vi.begin() + vi.size() / 2;
Und das ist wiederum äquivalent mit:
vi.begin() + (vi.end() - vi.begin()) / 2;
Du darfst aber 1/2 nicht ausklammern, weil du nur Differenzen (ganze Zahlen als relative Offsets), aber keine Iteratoren (absolute Positionen) multiplizieren und dividieren kannst.
-
Eigentlich ist das normal, dass das nicht funktioniert. Die Summe von zwei Iteratoren kann nichts sinnvolles sein, daher gibt es auch kein + dafür. Genauso wie es kein geteilt gibt. Kann es sein, dass das genau der Punkte ist, den der Primer an der Stelle machen will?
-
@Nexus
Das mit dem Iterator in der Mitte ist im Buch auch so beschreiben.
Aber jezt ist mir klar, dass das andere nicht funktionieren kann.@SeppJ
Hmm... im Buch endet zwar der Abschnitt Iteratorarithmetik mit dieser Übung, aber ja es ist gut denkbar das C++ Primer auf diesen Punkt hinweisen möchte.Vielen Dank für eure Hilfe!