Der konstante Map-Iterator wird nicht auf mymap.begin () gesetzt

7
%Vor%

Der Iterator scheint konstant zu sein, aber items.begin() gibt keinen konstanten Iterator zurück. Oder, das ist es, was ich denke , weil der Mouseover-Fehler etwa so aussieht:

%Vor%

Warum?

    
pighead10 03.05.2011, 16:31
quelle

2 Antworten

15

Verwenden Sie const_iterator als:

%Vor%

Aus dem Fehler wird klar, dass mymap.begin() const_iterator zurückgibt. Das liegt daran, dass mymap in der Funktion, in die Sie dies geschrieben haben, const ist, etwa wie folgt:

%Vor%

Das heißt, const container (ob std::map , std::vector usw.) gibt const_iterator zurück und nicht-const Container gibt iterator zurück.

Jeder Container hat überladene Funktionen von begin() und end() . So ruft const container das überladene begin() auf, das const_iterator zurückgibt und nicht-const container ruft das andere überladene begin() auf, das iterator zurückgibt. Und das gleiche für end() überladene Funktionen.

    
Nawaz 03.05.2011, 16:33
quelle
4

Das Problem ist, dass mymap im obigen Code eine konstante Map ist, keine veränderbare Map (vielleicht ist es ein Mitglied einer Klasse und dieser Code ist innerhalb einer konstanten Member-Funktion?). Daher wird der Aufruf von mymap.begin() die Überladung aufheben, die ein const_iterator anstelle der Überladung zurückgibt, die ein iterator zurückgibt.

Wenn Sie den Container nicht über den Iterator ändern müssen, verwenden Sie const_iterator . Wenn Sie beabsichtigen, die Map zu ändern, stellen Sie sicher, dass Sie ein nicht-konstantes Objekt für die Schleife verwenden (vielleicht sollte die Member-Funktion (falls das der Fall ist) nicht const sein?)

    
quelle

Tags und Links