简体   繁体   English

向量迭代器不兼容(运行时错误)

[英]Vector iterators incompatible (runtime error)

I am getting a runtime error saying that vector iterators incompatible. 我收到一个运行时错误,说矢量迭代器不兼容。

#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;
}

it2 !=Interval1.end() compares an iterator from Interval2 to an iterator from Interval1 – this is illegal. it2 !=Interval1.end()从迭代器比较Interval2 ,从迭代Interval1 -这是非法的。

Assuming that was just a typo, simply correct it to it2 != Interval2.end() . 假设这只是一个错字,只需将其更正为it2 != Interval2.end()

You compare it2 with Interval1.end() : 您将it2Interval1.end()进行比较:

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

There should be: 应该有:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM