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
的分配失败,则偶数
将泄漏。