C++ 如何将集合和数组合并到c++;

C++ 如何将集合和数组合并到c++;,c++,C++,当我执行这段代码时,它抛出:分段错误(内核转储) 我应该如何更改代码 #include<iostream> #include<set> #include<vector> #include<algorithm> using namespace std; int main(){ int *even=new int[100]; int *temp=new int[100]; for(int i=0;i<100;i+

当我执行这段代码时,它抛出:分段错误(内核转储) 我应该如何更改代码

#include<iostream>
#include<set>
#include<vector>
#include<algorithm>

using namespace std;

int main(){

    int *even=new int[100];

    int *temp=new int[100];

    for(int i=0;i<100;i++){
        even[i]=2*i+2;
        temp[i]=2*i+1;  
    }
    set <int,less<int> > odd(temp,temp+100);

    vector <int> vec;

    merge(even, even+100,odd.begin(), odd.end(), vec.begin());

    for(int i=0;i<100;i++){ cout<<"merged vector is:" <<vec[i]<<endl; 

    }
    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
整数*偶数=新整数[100];
int*temp=新int[100];
对于(int i=0;i
vec
为空,
merge
不会(不能)通过常规迭代器更改其大小。
这就是为什么
std::back\u inserter
被发明的原因–它是一个“迭代器”,使用
push\u back
添加元素:

merge(even, even+100, odd.begin(), odd.end(), back_inserter(vec));
由于您知道结果的大小,因此也可以“预先调整”vec的大小并使用当前方法:

vector <int> vec(100 + odd.size());
merge(even, even+100, odd.begin(), odd.end(), vec.begin());
向量向量(100+奇数.size()); 合并(偶数,偶数+100,奇数.begin(),奇数.end(),vec.begin());
改变
向量向量向量


vector vec(100+odd.size());

将向量大小调整为奇数和偶数大小之和,或者使用std::back\u不清楚为什么要分配原始数组,而不是仅使用
std::vector
进行临时存储。如果
temp
的分配失败,则
偶数
将泄漏。