qq_34891390 2016-05-05 11:58 采纳率: 50%
浏览 1489

C++ STL的merge函数越界

小白想问问大神,用merge函数时一直报错,说iterator越界
代码如下:
#include
#include
#include
#include
using namespace std;

void display(vector &v)
{
for (vector::iterator it = v.begin(); it != v.end();++it)
{
cout<<*it<<endl;
}
cout<<endl;
}

int main()
{
vector v1,v2,v3;
for (int i =0; i<=2 ;++i)
{
v1.push_back(i);
}
for (int i =3; i<=7 ;++i)
{
v2.push_back(i);
}
for (int i =8; i<=10 ;++i)
{
v3.push_back(i);
}
merge(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());
display(v3);
system("pause");
return 0;
}

谢谢大神

  • 写回答

1条回答

  • 小灸舞 2016-05-06 00:41
    关注

    v3需要resize一下才行
    PS:而且merge(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());这样用的话,v3前面的三个元素会被覆盖掉

     #include<iostream>
    #include<vector>
    #include<algorithm>  
    using namespace std;
    void display(vector<int> &v)
    {
        for (vector<int>::iterator it = v.begin(); it != v.end();++it)
        {
            cout<<*it<<endl;
        }
        cout<<endl;
    }
    int main()
    {
        vector<int> v1,v2,v3;
        for (int i =0; i<=2 ;++i)
        {
            v1.push_back(i);
        }
        for (int i =3; i<=7 ;++i)
        {
            v2.push_back(i);
        }
        for (int i =8; i<=10 ;++i)
        {
            v3.push_back(i);
        }
        v3.resize(11);
        merge(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());
        display(v3);
        system("pause");
        return 0;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?