Я реализовал функцию, чтобы объединить два отсортированных вектора (v1 и v2) в больший отсортированный (fa), передавая векторы по константной ссылке на него и сравнивая, какое значение является наименьшим, так что больший можно также отсортировать,Иногда это работает, но иногда, когда происходит первый доступ к пропущенным векторам, возникает ошибка сегментации.
Вот код для функции:
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) ссылкой, иногда вызывает ошибку сегмента, почему это так?