2015-01-10 4 views
-4

이 프로그램은 잘 실행되는 코드 블럭에서 실행되지만 온라인 판단에서는 동일한 입력에 대해 런타임 오류가 발생합니다. 이 오류의 원인이 무엇인지 알 수 없습니다. 빈 numbers 벡터에 호출C++의 런타임 오류

vector<int> twoSum(vector<int> &numbers, int target) 
    { 

    vector<int> c ; 

    sort(numbers.begin(),numbers.end()-1); 

    vector<int>::iterator i = numbers.begin(); 
    vector<int>::iterator j = numbers.end()-1; 

    while(i<=j) 
    { 
     int sum = *i + *j; 
     if(sum==target) 
          { c.push_back(i-numbers.begin()); 
          c.push_back(j-numbers.begin()); 
          //cout<<*i<<" "<<*j<<endl; 
          break; 

          } 
     else if(sum<target) i++; 
     else j--; 
    } 
    return c; 
} 
+0

클래스를 불필요하게 사용하고 코드를 들여 쓰지 않으려면 2 포인트 줄여야합니다. 어쨌든, 당신의 twoSum() 함수는 빈 벡터가 주어지면 깨지기도합니다. 아마도 잊어 버린 몇 가지 코너 케이스가있을 것입니다. –

+0

@UlrichEckhardt Sir.이 형식은 C++/Java의 온라인 심사 위원의 표준으로, 즉 클래스 메소드 내에 솔루션을 래핑합니다. 귀하의 downvote 또는 다른 질문을 물어 금지 수 있습니다 고려하십시오. –

+0

빈 벡터 입력이 아닌 정확한 입력으로 충돌이 확실합니까? – juanchopanza

답변

6
sort(numbers.begin(),numbers.end()-1); 

오류를 런타임에 이르게. sort(numbers.begin(), numbers.end());

+3

빈 벡터를 의미합니까? 1 요소가 잘되어야합니다. – juanchopanza

+1

... 빈 벡터의 경우, numbers.end() - 1은 이미 UB를 생성합니다. –

+0

수정되었습니다. 예, 문제는 빈 벡터에서 발생하며 단일 요소 벡터에서는 발생하지 않습니다. – timrau