2012-03-16 10 views
0

ベクトル・イテレータが互換性がないというランタイム・エラーが発生しました。ベクトル・イテレータが互換性がない(ランタイム・エラー)

#include <iostream> 
#include <vector> 

using namespace std; 


struct Interval 
{ 
public: 
    Interval(int s,int e):start(s),end(e) {} 
    int start; 
    int end; 

}; 


void merge_intervals(vector<Interval>& Interval1, vector<Interval>& Interval2, vector<Interval>& merged) 
{ 
    int i = 0 ; 
    cout<<"i"<<i<<endl; 
    vector<Interval>::iterator it1 = Interval1.begin(); 

    vector<Interval>::iterator it2 = Interval2.begin() ; 

    while(it1 != Interval1.end() && it2 !=Interval1.end()) 
    { 
     cout<<"i"<<i<<endl; 
     i++; 
     if(it1->start <= it2->start) 
     { 

      if(it1->end <= it2->end) 
      { 
       it1++; 
       merged.push_back(*it1); 
      } 
      else 
      { 
       it1++; 
       it2++; 
       merged.push_back(Interval(it1->start,it2->end)); 
      } 
     } 
     else 
     { 
      if(it1->end >= it2->end) 
      { 
       it2++; 
       merged.push_back(*it2); 
      } 
      else 
      { 
       it1++; 
       it2++; 
       merged.push_back(Interval(it2->start,it1->end)); 
      } 
     } 

     while(it1 != Interval1.end()) 
     { 
      merged.push_back(*it1); 
      *it1++; 
     } 

     while(it2 != Interval2.end()) 
     { 
      merged.push_back(*it2); 
      *it2++; 
     } 
    } 
} 

void print_intervals(vector<Interval>& merged) 
{ 
    vector<Interval>::iterator it = merged.begin(); 

    for(it = merged.begin();it != merged.end(); ++it) 
    { 
     cout<<"("<<it->start<<","<<it->end<<")"<<endl; 
    } 
} 

void test1() 
{ 
    vector<Interval> Interval1, Interval2, merged ; 

    Interval1.push_back(Interval(1,4)); 
    Interval1.push_back(Interval(6,10)); 
    Interval1.push_back(Interval(14,19)); 

    Interval2.push_back(Interval(13,17)); 

    merge_intervals(Interval1, Interval2, merged); 
    print_intervals(merged); 

} 

int main() 
{ 
    test1(); 
    return 0; 
} 
+6

これは 'インタビュー-questions'と関係があるのでしょうか? –

答えて

4

it2 !=Interval1.end()これは違法であるInterval1 –からイテレータにInterval2からイテレータを比較します。

単にタイプミスであったと仮定すると、単にit2 != Interval2.end()に修正してください。

+0

助けてくれてありがとう。その私の悪い私は簡単な間違いを見つけることができません。 – mousey

1

あなたはInterval1.end()it2を比較:

while(it1 != Interval1.end() && it2 !=Interval1.end()) 

があるはずです:

while(it1 != Interval1.end() && it2 !=Interval2.end()) 
関連する問題