2017-03-04 3 views
0

Ich habe vor ein paar Tagen mit Iteratoren begonnen. Und während ich verstehe, was die Grundidee ist, brauche ich Hilfe, um etwas aufzuräumen.Inkrementieren mit Iterator

Ich lerne C++ aus einem Buch und am Ende des Kapitels über Iterator es eine kleine Zuordnung ist das so geht:

„Unter der Annahme, dass‚scores‘ein Vektor ist, die Elemente vom Typ int hält, was ist los mit dem folgenden Code-Schnipsel (gemeint jedes Element zu erhöhen)?

vector<int>::iterator iter; 

for(iter =scores.begin(); iter !=scores.end(); iter++) 
{ 
    iter++; 
} 

jetzt ist es offensichtlich ist der Iterator iter bereits durch die for-Schleife in der Schleife ohne den Code selbst erhöht zu werden. so dachte ich, ich soll Erhöhen Sie einfach die Werte des Vektors, auf den der Iterator referenzierte

for(iter =scores.begin(); iter !=scores.end(); iter++) 
{ 
    *iter++; 
} 

Aber das gab auch einen Fehler zurück. Also habe ich gedacht ... ist es sogar möglich Werte mit einem Iterator zu erhöhen? Oder ist ein Iterator nur ein Objekt, das verwendet wird, um Objekte in einem Container zu durchlaufen und auf sie zu verweisen? Ohne ihren Wert tatsächlich ändern zu können?

+1

Mit Klammern sollte das beheben: '(* iter) ++;'. Suchoperator Vorrang. –

Antwort

2

Ändern Sie es an:

for(iter =scores.begin(); iter !=scores.end(); iter++) 
{ 
    (*iter)++; 
} 

In C++ Operatoren verschiedene Präzedenzfälle haben, sehen here for a table.

Postfix-Inkrement wird vor der De-Referenz durchgeführt.