konstruieren Ich versuche, eine Doppelschleife über eine std :: list zu machen, um auf jedem Paar von Elementen zu arbeiten. Ich habe jedoch Probleme beim Initialisieren des zweiten Iterators. Der Code Ich mag würde schreiben ist:Wie man einen Iterator std :: list in Schleife mit Inkrement
for(std::list<int>::iterator i = l.begin(); i != l.end(); ++i) {
for(std::list<int>::iterator j = i+1; j != l.end(); ++j) {
...
}
}
das nicht funktioniert, weil die Liste Iteratoren sind nicht zufällig-Zugriff, so dass Sie ein nicht tun. Aber ich habe Probleme, eine gute Alternative zu finden. der Compiler scheint nicht sehr glücklich mit std::list<int>::iterator j(i)++;
zu sein, auf den ich einige Hoffnung hatte. Das zu erreichen, was ich will, scheint so zu sein, als müsste ich ein peinliches Extra-Inkrement haben, das nicht gut in die Struktur der for-Schleife passt.
Es gibt offensichtliche Alternativen (zum Beispiel mit einem Vektor!), Aber es scheint mir, dass es eine einigermaßen ordentliche Art und Weise geben sollte, dies zu tun, was ich gerade nicht sehe.
Vielen Dank im Voraus für jede Hilfe :)
'advance' hat keinen Rückgabewert, es ändert das erste Argument. (Was ich persönlich nicht mag.) Das heißt, es ist einfach, eine "advance_copy" -Funktion zu schreiben. – GManNickG
@GMan: Korrigiert. Ty! – dirkgently
Kein Problem. Ich entschied mich für meine Idee als alternative Antwort. – GManNickG