Вы просите, чтобы vec3
было пересечением двух других. Джальф демонстрирует, как заполнить vec3
с помощью функции std::set_intersection
из заголовка <algorithm>
. Но помните, что для работы установленных функций векторы должны быть отсортированы .
Тогда вы хотите, чтобы vec1
и vec2
были разницей между собой и vec3
. В наборе обозначений:
vec1 := vec1 \ vec3;
vec2 := vec2 \ vec3;
Для этого вы можете использовать функцию std::set_difference
, но вы не можете использовать ее для изменения векторов на месте. Вам нужно будет вычислить другой вектор, чтобы сохранить разницу:
std::vector<foo> temp;
std::set_difference(vec1.begin(), vec1.end(),
vec3.begin(), vec3.end(),
std::back_inserter(temp));
vec1 = temp;
temp.clear();
std::set_difference(vec2.begin(), vec2.end(),
vec3.begin(), vec3.end(),
std::back_inserter(temp));
vec2 = temp;