Функция пересечения двух массивов, дающая плохой результат - PullRequest
0 голосов
/ 17 февраля 2019

Я написал эту функцию, которая принимает в качестве параметра два массива (с их соответствующими длинами) и возвращает обратно другой массив с элементами, которые одинаковы в обоих массивах.Но вместо этого он дает мне больше чисел.

void intersection(int vector1[], int length1, int vector2[], int length2, int vectorResult[], int& resultLength) {
int index = 0;
for (int i = 0; i < length1; i++) {
    for (int j = 0; j < length2; j++) {
        if (vector1[i] == vector2[j]) {
            vectorResult[index] = vector2[j];
            resultLength++;
            index++;
        }
    }

}
}

Итак, с этими векторами:

Vector1: [1,3,5,7,9]
Vector2: [9,10,11,12,13,14]
Result: [9]

Вместо этого я получаю:

Vector1: [1,3,5,7,9]
Vector2: [9,10,11,12,13,14]
Result: [9,2,3,4,5,0,0]

1 Ответ

0 голосов
/ 17 февраля 2019

Предполагая, что оба массива отсортированы перед вызовом intersection Я бы выбрал:

void intersection(int vector1[], int length1, int vector2[], int length2, int vectorResult[], int &resultLength) {
    resultLength = std::distance(vectorResult,
                                 std::set_intersection(vector1, vector1 + length1,
                                                       vector2, vector2 + length2,
                                                       vectorResult));
}
...