std::list<CPoint>::iterator iter= vertices.end();
CPoint point = *(iter+1);
그런 경우 나는 (iter-1)
또는 (iter+1)
의 값을 변수에 할당하려고 시도했습니다. 왜 작동하지 않습니까? iter++
또는 iter--
이 작동합니다.`list :: iterator + 1`이 왜 작동하지 않습니까?
std::list<CPoint>::iterator iter= vertices.end();
CPoint point = *(iter+1);
그런 경우 나는 (iter-1)
또는 (iter+1)
의 값을 변수에 할당하려고 시도했습니다. 왜 작동하지 않습니까? iter++
또는 iter--
이 작동합니다.`list :: iterator + 1`이 왜 작동하지 않습니까?
단순히 이러한 작업은 iterator
정의의 일부가 아닙니다. 이를 위해 std::advance()
함수를 사용할 수 있습니다.
물론, operator+(int)
는 operator++()
인 것처럼, 그렇게 오버라이드 (override) 할 수 있지만,이 작업이 일정 복잡성이 보장되지 않으며, (iter + n)
같은 구문이 달리 제시 할 수 있기 때문에 아마도 그것은 아니다. advance
에서
:
복잡성 : 선형. 그러나 이 추가로
RandomAccessIterator
의 요구 사항을 충족하면 복잡성은 일정합니다.
그러나 iterator의 값을 다른 반복자에 '+ 1'로 지정하려면 어떻게해야할까요? 즉 iter2 = iter + 1? 'std :: advance'는 전달 된 iterator를 증가시키기 때문에'iter2 = std :: advance (iter, 1)'는'iter'를 증가시키고 'iter2'에 증가 된 값을 할당하지 않을 것입니다. 원래 iter 자체를 증가시키지 않고 iterator의 값을 +1하도록 어떻게해야합니까? – Ghost
@Ghost : 쉬운 ... iter2 = iter; std :: advance (iter2, 1);'. 8-) 당연히 하나만 진행 시키려면 다음과 같이하면됩니다 : iter2 = iter; ++ iter2;' – rodrigo
오, 알았어, 고마워! – Ghost
어디에서 코드가 더 있습니까? – hmatar