Вы, безусловно, хотите использовать std::set_intersection
из заголовка <algorithm>
для этого. Помните, что необработанные указатели на непрерывную память квалифицируются как входные итераторы, следовательно:
#include <algorithm>
#include <vector>
std::vector<int> result;
// Make sure that [j, j + n) and [k, k + m) are sorted
std::set_intersection(j, j + n, k, k + m, std::back_inserter(result));
Обратите внимание, что, как указал @john в комментариях, этот алгоритм требует, чтобы обе входные последовательности были отсортированы.
Если входные диапазоны все равно не отсортированы и вы беспокоитесь о производительности, вы можете прочитать этот пост для альтернативы.