2017-09-19 9 views
0

반복기를 사용하여 다음과 같은 문제를 겪어 본 적이 없으므로 솔루션을 시작할 위치를 알 수 없습니다. 나는이 다음 내가 바로 전에 뮤팅하는 LIST "StringOfPearls"C++ : std :: advance (한 번)가 목록의 끝으로 이동합니다.

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; 

결과 :

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

난 그냥 바보 뭔가를 누락 의심의 여지가 있지만, 누군가가 나를 도울 수 있습니까?

+4

[mcve]를 표시하십시오. 코드에서'DNAreplicase'가'StringOfPearls'의 반복자인지는 명확하지 않습니다. – user463035818

+0

'DNAreplicase'가 초기화 된 곳은 어디입니까? –

답변

0

std::distance을 올바르게 사용하고 있지 않습니다. begin iterator는 첫 번째 인수입니다 (예 :

distance(StringOfPearls->begin(), DNAreplicase) 

이것은 범위를 나타내는 반복자 쌍을 취하는 모든 기능에 대한 규칙입니다.

+1

C++ 11 업데이트 : _ "임의 액세스 반복기가 사용되고 처음부터 마지막으로 도달 할 수 있으면 값이 음수 일 수 있습니다."_ source : http://en.cppreference.com/w/cpp/iterator/distance –