2013-01-12 3 views
0
std::list<CPoint>::iterator iter= vertices.end(); 
CPoint point = *(iter+1); 

그런 경우 나는 (iter-1) 또는 (iter+1)의 값을 변수에 할당하려고 시도했습니다. 왜 작동하지 않습니까? iter++ 또는 iter--이 작동합니다.`list :: iterator + 1`이 왜 작동하지 않습니까?

+0

어디에서 코드가 더 있습니까? – hmatar

답변

2

단순히 이러한 작업은 iterator 정의의 일부가 아닙니다. 이를 위해 std::advance() 함수를 사용할 수 있습니다.

물론, operator+(int)operator++() 인 것처럼, 그렇게 오버라이드 (override) 할 수 있지만,이 작업이 일정 복잡성이 보장되지 않으며, (iter + n) 같은 구문이 달리 제시 할 수 있기 때문에 아마도 그것은 아니다. advance에서

:

복잡성 : 선형. 그러나 이 추가로 RandomAccessIterator의 요구 사항을 충족하면 복잡성은 일정합니다.

+0

그러나 iterator의 값을 다른 반복자에 '+ 1'로 지정하려면 어떻게해야할까요? 즉 iter2 = iter + 1? 'std :: advance'는 전달 된 iterator를 증가시키기 때문에'iter2 = std :: advance (iter, 1)'는'iter'를 증가시키고 'iter2'에 증가 된 값을 할당하지 않을 것입니다. 원래 iter 자체를 증가시키지 않고 iterator의 값을 +1하도록 어떻게해야합니까? – Ghost

+0

@Ghost : 쉬운 ... iter2 = iter; std :: advance (iter2, 1);'. 8-) 당연히 하나만 진행 시키려면 다음과 같이하면됩니다 : iter2 = iter; ++ iter2;' – rodrigo

+0

오, 알았어, 고마워! – Ghost

관련 문제