迭代器不兼容错误

时间:2017-02-15 01:10:02

标签: c++ vector runtime-error

我试图编写一个函数,它接受两个向量并将它们合并在一起,来回交替(即v1 = 1,2,3 v2 = 4,5,6会产生v3 = 1,4, 2,5,3,6)。问题是,当我运行我的函数时,我得到一个错误,说“矢量迭代器”是不兼容的。'根据我的研究,我认为它与我使用.begin()和.end()函数有关,但看到我只在这里工作了几个月,我不知道如何要解决这个问题。注意:NULL上的push_back是在向量中留下一个空的空格。

以下是代码:

void merge(vector<double> x, vector<double> y, vector<double>& merged) {
    auto xStart = x.begin();
    auto yStart = y.begin();        

    while (xStart != x.end() && yStart != x.end()) {
        merged.push_back(*xStart);
        merged.push_back(*yStart);
       ++xStart;
       ++yStart;
   }
   if (xStart != x.end()) {
       while (xStart!= x.end()) {
           merged.push_back(*xStart);
           merged.push_back(NULL);
           ++xStart;
       }
   }
   if (yStart != y.end()) {
        while (yStart != y.end()) {
            merged.push_back(*yStart);
            merged.push_back(NULL);
            ++yStart;
        }
   }
}

1 个答案:

答案 0 :(得分:1)

有一个错字

while (xStart != x.end() && yStart != x.end()) {
                                      ^^^^^^

必须有

while (xStart != x.end() && yStart != y.end()) {
                                      ^^^^^^^

这句话

merged.push_back(NULL);

没有意义。

同样声明像

这样的函数要好得多
void merge( const vector<double> &x, const vector<double> &y, vector<double>& merged );

这是一个示范程序

#include <iostream>
#include <vector>

template <typename T>
void merge( const std::vector<T> &x, 
            const std::vector<T> &y, 
            std::vector<T> &merged ) 
{
    merged.reserve( merged.size() + x.size() + y.size() );

    auto xStart = x.begin();
    auto yStart = y.begin();        

    for ( ; xStart != x.end() && yStart != y.end(); ++xStart, ++yStart ) 
    {
        merged.push_back(*xStart);
        merged.push_back(*yStart);
    }


    for ( ; xStart != x.end(); ++xStart ) 
    {
        merged.push_back( *xStart );
    }

    for ( ; yStart != y.end(); ++yStart ) 
    {
        merged.push_back( *yStart );
    }
}

int main() 
{
    std::vector<int> v1 = { 0, 2, 4, 6, 8 };
    std::vector<int> v2 = { 1, 3, 5, 7, 9 };

    std::vector<int> merged;

    merge( v1, v2, merged );

    for ( int x : merged ) std::cout << x << ' ';
    std::cout << std::endl;

    return 0;
}

它的输出是

0 1 2 3 4 5 6 7 8 9