使用 C++ 中的 STL 查找第一个数组中存在但不在第二个数组中的元素

c++server side programmingprogramming

我们有两个数组,任务是比较这两个数组,并使用 C++ 中的标准模板库 (STL) 查找第一个数组中存在但不在第二个数组中的数字。

示例

输入:array1[ ] = {1,2,3,4,5,7}
array2[ ] = {2,3,4,5,6,8}
输出:1, 7
输入:array1[ ] = {1,20,33,45,67}
array2[ ] = {1,12,13,114,15,13}
输出:20,33,45,67

以下程序中使用的方法如下

  • 在此程序中,我们想要查找在第一个数组中存在但在第二个数组中不存在的元素。
  • 为了做到这一点,我们首先初始化两个变量。现在我们将创建一个名为"find"的函数查找在数组 1 中存在而在数组 2 中不存在的元素。
  • 在函数中,我们将声明一个向量(向量与动态数组相同,能够在插入或删除元素时自动调整自身大小。)来存储结果,我们还将声明一个迭代器来遍历该向量。
  • 现在,我们将对数组进行排序并使用 set_difference( ) 方法查找缺失的元素,然后根据结果调整向量大小并存储值,然后打印解决方案

在标准模板库 (STL) 中,我们可以使用 set_difference( ) 方法来查找"array1-array2"。两个集合的差异由第一个集合中存在但不在第二个集合中的元素形成。函数复制的元素始终来自第一个范围,顺序相同。两个范围内的元素都应已排序。

语法

set_difference() 的语法是 −

OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result);

算法

开始
步骤 1-> 创建查找缺失元素的函数
   void find(int array1[], int array2[], int x, int y)
   声明一个向量,将结果存储为 vector<int> v(x + y)
   声明一个迭代器遍历向量为
   vector<int>::iterator it
   对数组进行排序
   对 array1 进行排序并对 array2 进行排序
End
   查找缺失元素
   diff = set_difference(array1, array1 + x, array2, array2 + y, v.begin())
   将向量大小调整为现有计数
   v.resize(diff - v.begin())
   打印 array1[] 中存在但不存在于 array2[] 中的元素
   for (diff = v.begin()
      diff != v.end()
      ++diff
      Print *diff
   结束
步骤 2-> 在 main() 中
   将数组声明为 int array1 和 int array2
   声明变量 x 和 y 以计算 array1 和 array 2 的大小,如下所示
   int x = array1 的大小和 int y = array2 的大小
调用函数为 find(array1, array2, x, y)

示例

#include <bits/stdc++.h>
using namespace std;
int main() {
   int array1[] = { 1, 2, 3, 4, 5, 7 };
   int array2[] = { 2, 3, 4, 5, 6, 8 };
   int x = sizeof(array1) / sizeof(array1[0]);
   int y = sizeof(array2) / sizeof(array2[1]);
   find(array1, array2, x, y);
   return 0;
}
// 创建名为"find"的函数,用于查找缺失元素
void find(int array1[], int array2[],
int x, int y) {
   // 声明一个存储结果的向量
   vector<int> v(x + y);
   // 声明一个迭代器遍历向量
   vector<int>::iterator it;
   // 对数组进行排序
   sort(array1, array1 + x);
   sort(array2, array2 + y);
   // 查找缺失元素
   diff = set_difference(array1, array1 + x, array2, array2 + y, v.begin());
   //将向量大小调整为现有计数
   v.resize(diff - v.begin());
   cout << "array1[] 中存在但不在 array2[] 中的元素:”;
   for (diff = v.begin(); diff != v.end(); ++diff)
   cout << *diff << " ";
   cout << endl;
}

输出

如果我们运行上述代码,它将生成以下输出 −

array1[] 中存在但不在 array2[] 中的元素:1,7

相关文章