2010-04-13 9 views
0

벡터 요소를 가리키는 반복자를 지니고 있으며 벡터의 다음 요소와 비교하고 싶습니다. 여기C++ 벡터 <T> :: iterator 연산자 +

는 foo는 어디 내가

Class Point{ 
public: 
float x,y; 
} 

//Somewhere in my code I do this 

vector<Point> points = line.getPoints(); 

foo (points.begin(),points.end()); 

이 무엇 :

void foo (Vector<Point>::iterator begin,Vector<Point>::iterator end) 
{ 
    std::Vector<Point>::iterator current = begin; 

    for(;current!=end-1;++current) 
    { 
     std::Vector<Point>::iterator next = current + 1; 

     //Compare between current and next. 
    } 
} 

내가이 일 것이라고 생각하지만, current + 1 나에게 벡터의 다음 요소를 제공하지 않습니다.

비록 운영자 +가가는 길 이었지만 그렇게 느껴지지 않았습니다. 이것에 대한 해결 방법이 있습니까?

감사

+2

'next'가 현재 이후의 요소를 참조하지 않는다고 생각하는 이유에 대해 자세히 설명해 주시겠습니까? –

+2

"하지만 현재 + 1이 나에게 벡터의 다음 요소를 제공하지 않는다"는 것을 명확히 할 수 있습니까? ? – Naveen

+0

이것은 완벽하게 괜찮아 보인다. –

답변

3

current + 1 (벡터 반복자를 포함한다) 임의 접근 반복자 유효하고,이 후 반복자이며 현재 (즉, 어떻게 생각하는지는 않습니다). 비교 코드를 확인 (또는 게시하십시오), 아마도 거기에 뭔가 잘못된 것이 있습니다.

+0

실제로. 해결책? 1) S.O에 물어보기, 2) 잠을 자고있는 중. – Tom

1

std::vector랜덤 액세스 반복기입니다. 이는 기본적으로 포인터처럼 다재다능 함을 의미합니다. 그것들은 완전한 포인터 연산 (it+5, it+=2)과 !=/== (즉, <, <=, >>=) 이외의 비교를 제공합니다. 코드에서 반복자 사이

비교 확실히 작동해야하지만 무의미한 것이다 : 그것은 당신을 위해 작동하지 않는 경우

for(std::vector<Point>::iterator current = begin;current!=end-1;++current) 
{ 
    std::vector<Point>::iterator next = current + 1; 

    assert(current!=next); // always true 
    assert(current<next); // also always true 
} 

그래서, 당신이 뭔가 잘못 할 가능성이 높습니다. 불행히도, "... 내게 벡터의 다음 요소를주지 않는다 ..."는 당신이 시도하고있는 어떤 단서도 제공하지 않기 때문에, 당신이 잘못하고있는 것을 추측하기가 어렵습니다.

+0

현재는이 루프의 마지막 요소를 가리켜서는 안되지만,'begin! = end'에 대한 검사가 순서대로 이루어져야합니다. – visitor

+0

@visitor : 예, 맞습니다. 나는 그것을 보지 않고 루프 종료 조건을 복사했습니다. '' – sbi

0

아마도 오타 일 수도 있지만 코드는 Vector이고 표준 컨테이너는 vector (소문자 V)입니다.

그러나 질문에 오타가 아닌 경우 Vector의 정의를 보지 않고도 그 의미를 알 수있는 방법이 없습니다.