Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将两个双数组集合并为一个数组集以查找其并集和交集的最简单方法_C++_Oop - Fatal编程技术网

C++ 将两个双数组集合并为一个数组集以查找其并集和交集的最简单方法

C++ 将两个双数组集合并为一个数组集以查找其并集和交集的最简单方法,c++,oop,C++,Oop,我一直想把这件事做完,但现在我被卡住了。有人能推荐最简单的方法吗?多谢各位 c[i] = a[i] + b[i]; // The snippet of code I have above works fine with operator: + - / * // a[i] = { 1, 8, 13, 15 } // b[i] = { 3, 8, 13, 20 } // then c[i] = { 4, 16, 26, 35 } // But how do i find the union

我一直想把这件事做完,但现在我被卡住了。有人能推荐最简单的方法吗?多谢各位

c[i] = a[i] + b[i];

// The snippet of code I have above works fine with operator: + - / * 
// a[i] = { 1, 8, 13, 15 }
// b[i] = { 3, 8, 13, 20 }
// then  c[i] = { 4, 16, 26, 35 }

// But how do i find the union and intersection of both arrays?
// I want the results to look like:
// union = {1,3,8,13,15,20}
// intersection = {8,13}
试试这个

//Unioin of 2 array

#include<stdio.h>

int printUnion(int arr1[], int arr2[], int m, int n)
{
  int i = 0, j = 0;
  while(i < m && j < n)
  {
    if(arr1[i] < arr2[j])
      printf(" %d ", arr1[i++]);
    else if(arr2[j] < arr1[i])
      printf(" %d ", arr2[j++]);
    else
    {
      printf(" %d ", arr2[j++]);
      i++;
    }
  }


  while(i < m)
   printf(" %d ", arr1[i++]);
  while(j < n)
   printf(" %d ", arr2[j++]);
}


int main()
{
  int arr1[] = {1, 8, 13, 15};
  int arr2[] = {3, 8, 13, 20};
  int m = sizeof(arr1)/sizeof(arr1[0]);
  int n = sizeof(arr2)/sizeof(arr2[0]);
  printUnion(arr1, arr2, m, n);
  getchar();
  return 0;
}


//Intersection of two array

#include<stdio.h>

int printIntersection(int arr1[], int arr2[], int m, int n)
{
  int i = 0, j = 0;
  while(i < m && j < n)
  {
    if(arr1[i] < arr2[j])
      i++;
    else if(arr2[j] < arr1[i])
      j++;
    else /* if arr1[i] == arr2[j] */
    {
      printf(" %d ", arr2[j++]);
      i++;
    }
  }
}


int main()
{
  int arr1[] = {1, 8, 13, 15};
  int arr2[] = {3, 8, 13, 20};
  int m = sizeof(arr1)/sizeof(arr1[0]);
  int n = sizeof(arr2)/sizeof(arr2[0]);
  printIntersection(arr1, arr2, m, n);
  getchar();
  return 0;
}
//2个数组的Unioin
#包括
int printUnion(int arr1[],int arr2[],int m,int n)
{
int i=0,j=0;
而(i
因为您要求的是最简单的方法。 您可以将数组的元素放入2个std::set中

std::set<T> set1(begin(array1), end(array1));
std::set<T> set2(begin(array2), end(array2));
std::设置set1(开始(array1),结束(array1));
std::设置set2(开始(array2),结束(array2));
然后在2个新的std::set中使用std::set_并集和std::set_交集。 请看一下它在这些链接和
因此,STL负责大部分逻辑和容器。

C++没有“双数组集”。OP可以只对这两个数组进行
std::sort
而不是将它们插入
std::set
(如果必须像
std::set
那样删除doublon,OP可能必须使用
std::unique