2017-09-19 11 views
0

Ich bin noch nie auf das folgende Problem mit Iteratoren eingegangen, so dass ich wirklich nicht weiß, wo die Lösung starten könnte. Ich habe eine Liste „StringOfPearls“ die richtige permutiert wird, bevor ich folgendes tun:C++: std :: advance (einmal) geht zum Ende der Liste

DNAr = StringOfPearls->begin(); // Added 1 element to the beginning of this list in earlier line of code 
cout << "pos DNAr before bumping by 1: " << distance(DNAreplicase, StringOfPearls->begin()) << endl; 
advance(DNAreplicase, 1); 
cout << "pos DNAr after bumping by 1: " << distance(DNAreplicase, StringOfPearls->begin()) << endl; 

Returns:

pos DNAr before bumping by 1: 0 
pos DNAr after bumping by 1: 10 

Kein Zweifel, ich nur dumm etwas fehlt bin, aber kann mir jemand helfen?

+4

Bitte zeigen Sie eine [MCVE]. Aus dem Code ist nicht einmal klar, ob "DNAreplicase" ein Iterator für "StringOfPearls" ist. – user463035818

+0

Wo wird 'DNAreplicase' initialisiert? –

Antwort

0

Sie verwenden std::distance nicht korrekt. begin Iterator ist das erste Argument, z.B.

distance(StringOfPearls->begin(), DNAreplicase) 

Dies ist die Konvention für alle Funktionen, die Paare von Iteratoren nehmen, die einen Bereich bezeichnen.

+1

Update für C++ 11: _ "Der Wert kann negativ sein, wenn Random-Access-Iteratoren verwendet werden und der erste von letzter Stelle erreichbar ist." _ Source: http://en.cppreference.com/w/cpp/iterator/distance –

Verwandte Themen