Необходимо создать третий массив минимально возможного размера, в котором нужно собрать элементы массива A, которые не включаются в массив B

Необходимо создать третий массив минимально возможного размера, в котором нужно собрать элементы массива A, которые не включаются в массив B. Код полностью рабочий,он проходится по всему массиву и если находит одинаковые значения то он добавляет к размеру мин размеру +1, то есть массивА(1,3,4,6) и массивБ(1,5,4,1) он должен вывести массивС(1,4) но он выводит: (мусор,1,4); Я понимаю почему это происходит но не понимаю как это исправить(Видел на StackOverflow как другие это решают но как таковых объяснений не заметил).Используется пузырьковая сортировка,лишь базовые библиотеки

int sizeA, sizeB;
int minSize = 0;
cout << "Введите размер первого массива: ";
cin >> sizeA;
cout << "Введите размер второго массива: ";
cin >> sizeB;
int* masA = new int[sizeA];
int* masB = new int[sizeB];

//Этап присвоение значения для masA и masB
for (int i = 0; i < sizeA; i++) {
    masA[i] = rand() % 10;
}
for (int i = 0; i < sizeB; i++) {
    masB[i] = rand() % 10;
}

//Сортируем массив
sort(masA, sizeA);
sort(masB, sizeB);

//Выводим отсортированный массив
cout << "Отсортированный массив A: ";
for (int i = 0; i < sizeA; i++) {
    cout << masA[i] << " ";
}
cout << endl;
cout << "Отсортированный массив B: ";
for (int i = 0; i < sizeB; i++) {
    cout << masB[i] << " ";
}
cout << endl;

//Узнаём размер 3 минимального массива
for (int i = 0; i < sizeA; i++) {
    for (int j = 0; j < sizeB; j++) {
        if (masA[i] == masB[j]) {
            minSize++;
        }
    }
}

//Новый массив с минимальным размером
int* masC = new int[minSize];


for (int i = 0; i < sizeA; i++) {
    for (int j = 0; j < sizeB; j++) {
        if (masA[i] == masB[j]) {
            masC[i] = masA[i];
        }
    }
}
for (int i = 0; i < minSize; i++) {
    cout << masC[i] << " ";
}

delete[]masA;
delete[]masB;
delete[]masC;

Ответы (1 шт):

Автор решения: Harry

Вот это

for (int i = 0; i < sizeA; i++) {
    for (int j = 0; j < sizeB; j++) {
        if (masA[i] == masB[j]) {
            masC[i] = masA[i];
        }
    }
}

попробуйте переписать как

for (int k = 0, i = 0; i < sizeA; i++) {
    for (int j = 0; j < sizeB; j++) {
        if (masA[i] == masB[j]) {
            masC[k++] = masA[i];
        }
    }
}

Ну, т.е начать писать в массив C с самого начала и подряд, а не только отдельные элементы массива A.

→ Ссылка