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;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献