我实现了一个函数,将两个排序向量(v1和v2)合并为更大的排序向量(fa),方法是将这些向量通过const引用传递给它,然后比较哪个值最小,以便也可以对更大的排序。它有时可以工作,但是有时在第一次访问传递的向量时发生分段错误。
以下是该函数的代码:
void merge(const vector<int>& v1,
const vector<int>& v2,
vector<int>& fa)
{
int i = 0, p1 = 0, p2 = 0;
while(p2 < v2.size() && p1 < v1.size())
{
if(v1[p1] < v2[p2]){
fa[i] = v1[p1];
p1++;
i++;
}
else
{
fa[i] = v2[p2];
p2++;
i++;
}
}
//cover the cases where one of the arrays is done and the other isn't
while(p1 == v1.size() && p2 < v2.size())
{
fa[i] = v2[p2];
p2++;
i++;
}
while(p2 == v2.size() && p1 < v1.size())
{
fa[i] = v1[p1];
p1++;
i++;
}
}
最初,我尝试使用迭代器,但是它也不一致,因此将其更改为整数,可能是因为迭代器在第一个函数调用后消失了。
同样,当我按值传递时,它也永远不会给我带来细分错误。
TLDR-访问由(const)引用传递的向量容器有时会给我seg错误,为什么?