Как получить общие элементы двух списков и сохранить их в новом списке без дублирования - PullRequest
0 голосов
/ 02 апреля 2019

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

Я уже пытался сравнить каждый элемент первого массива с каждым из элементов второго массива, и если они равны друг другу, то я должен сохранить его в новоммассив.Но, тем не менее, это не кажется мне эффективным кодом.

int *j = new int[n];
getList(j, n);

int *k = new int[m];
getList(k, m);

/* how would I create a new array to 
store the common elements of the 
previous two arrays and display its elements? */

1 Ответ

1 голос
/ 02 апреля 2019

Вы, безусловно, хотите использовать 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 в комментариях, этот алгоритм требует, чтобы обе входные последовательности были отсортированы.

Если входные диапазоны все равно не отсортированы и вы беспокоитесь о производительности, вы можете прочитать этот пост для альтернативы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...