为什么在合并后对向量进行排序时显示非法内存位置?
Why it shows illegal memory location when sorting vector after merge?
我试图在合并两个向量后对一个新向量进行排序,代码就是这样,
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
void vec_output(vector <int> vec_input)
{
for (int i = 0; i < vec_input.size(); i++)
{
cout << vec_input[i] << ' ';
}
cout << endl;
}
int main(){
vector <int> v1{2,3,1};
vector <int> v2{5,4,6};
vector <int> v3;
set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
sort(v3.begin(), v3.end());
vec_output(v3);
return 0;
}
但是,它显示错误:Exception has occurred. Segmentation fault
,我知道这可能是访问未知内存造成的,但是如何呢?
问题 是 v3
是空的,所以写 v.begin()
作为 set_union
的最后一个参数是不可能的。您应该使用 back_inserter
作为:
set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v3));
std::back_inserter
将 return 一个 输出迭代器 back_insert_iterator
将使用 v3.push_back
到 append/push_back 元素进入 v3
.
此外,来自 std::set_union documentation:
Elements are compared using operator< and the ranges must be sorted with respect to the same.
(强调我的)
另请注意,在使用 set_union
后,您 不需要 在 v3
上使用 std::sort
。
我试图在合并两个向量后对一个新向量进行排序,代码就是这样,
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
void vec_output(vector <int> vec_input)
{
for (int i = 0; i < vec_input.size(); i++)
{
cout << vec_input[i] << ' ';
}
cout << endl;
}
int main(){
vector <int> v1{2,3,1};
vector <int> v2{5,4,6};
vector <int> v3;
set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
sort(v3.begin(), v3.end());
vec_output(v3);
return 0;
}
但是,它显示错误:Exception has occurred. Segmentation fault
,我知道这可能是访问未知内存造成的,但是如何呢?
问题 是 v3
是空的,所以写 v.begin()
作为 set_union
的最后一个参数是不可能的。您应该使用 back_inserter
作为:
set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v3));
std::back_inserter
将 return 一个 输出迭代器 back_insert_iterator
将使用 v3.push_back
到 append/push_back 元素进入 v3
.
此外,来自 std::set_union documentation:
Elements are compared using operator< and the ranges must be sorted with respect to the same.
(强调我的)
另请注意,在使用 set_union
后,您 不需要 在 v3
上使用 std::sort
。