Kann ein STL-Map-Iterator durch Inkrementieren die Grenzen verlassen?

7

Kann der Operator ++ für assoziative Container einen Iterator nach dem Ende einer Sammlung senden?

Beispiel:

%Vor%

Am Ende davon, ist new_iter == new_map.end (), oder endet es in der großen unbekannten?

Hinweis: Ich weiß, das ist durcheinander und nicht die Art, Dinge zu tun. Ich arbeite an einem WTF Corporate Code.

    
Mike Lewis 24.08.2009, 21:07
quelle

3 Antworten

26

Wenn Sie den Enditerator erhöhen, ist das Ergebnis ein nicht definiertes Verhalten. So könnte es Ende bleiben, oder am Ende gehen, oder deiner Großmutter eine Verbindung zu Ziegenbock mailen.

Siehe auch: Tyler McHenry 24.08.2009, 21:09

quelle
11

Die Voraussetzung für den Operator ++ für einen Vorwärtsiterator ist, dass der Iterator dereferenziert werden kann. Dies bedeutet, dass es nicht über das Ende der Map hinausgehen kann, sodass Ihr Code undefiniertes Verhalten ergibt. Dies wird in Abschnitt 24.1.3 des C ++ Standards beschrieben.

    
anon 24.08.2009 21:15
quelle
5

Wie andere bereits erwähnt haben, verursacht das Inkrementieren des End-Iterators undefiniertes Verhalten. Es ist jedoch erwähnenswert, dass Visual Studio 2008 eine Debug-Assertion zur Laufzeit auslöst (aufgrund seiner überprüfte Iteratoren ), wenn Sie dies tun.

    
Alan 24.08.2009 21:21
quelle

Tags und Links