Computer >> Máy Tính >  >> Lập trình >> C ++

Các phần tử hiện diện trong mảng đầu tiên và không có trong mảng thứ hai bằng cách sử dụng STL trong C ++

Chúng ta có hai mảng, nhiệm vụ là so sánh hai mảng và tìm các số có trong mảng đầu tiên nhưng không có trong mảng thứ hai, sử dụng Thư viện mẫu chuẩn (STL) trong C ++.

Ví dụ

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

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây là sau -

  • Trong chương trình này, chúng tôi muốn tìm các phần tử có trong mảng đầu tiên nhưng không có trong mảng thứ hai.
  • Để thực hiện việc này, trước tiên, chúng tôi khởi tạo hai biến. Bây giờ chúng ta sẽ tạo một hàm có tên là “find” để tìm các phần tử có trong mảng 1 và không có trong mảng 2.
  • Trong hàm, chúng ta sẽ khai báo một vectơ (Vectơ giống như mảng động với khả năng tự động thay đổi kích thước khi một phần tử được chèn hoặc xóa.) để lưu trữ kết quả và chúng tôi cũng sẽ khai báo một trình vòng lặp để duyệt qua vectơ.
  • Bây giờ chúng ta sẽ sắp xếp các mảng và tìm các phần tử bị thiếu bằng cách sử dụng phương thức set_difference () và thay đổi kích thước vectơ theo kết quả và lưu trữ các giá trị, sau đó in lời giải

Trong Thư viện Mẫu Chuẩn (STL), chúng ta có thể sử dụng phương thức set_difference () để tìm “array1-array2”. Sự khác biệt của hai tập hợp được hình thành bởi các phần tử có trong tập hợp đầu tiên, nhưng không có trong tập hợp thứ hai. Các phần tử được sao chép bởi hàm luôn đến từ phạm vi đầu tiên, theo cùng một thứ tự. Các phần tử trong cả hai phạm vi sẽ được sắp xếp theo thứ tự.

Cú pháp

Cú pháp cho set_difference () là -

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

Thuật toán

Start
Step 1-> Create function for finding missing elements
   void find(int array1[], int array2[], int x, int y)
   Declare a vector which stores the result as vector<int> v(x + y)
   Declare an iterator traverse the vector as
   vector<int>::iterator it
   Sort the arrays
   sort array1 and sort array2
End
   Find the missing elements
   diff = set_difference(array1, array1 + x, array2, array2 + y, v.begin())
   resize the vector to the existing count
   v.resize(diff - v.begin())
   print the elements present in array1[] and not in array2[]
   for (diff = v.begin()
      diff != v.end()
      ++diff
      Print *diff
   End
Step 2-> In main()
   Declare array as int array1and int array2
   Declare variable x and y to calculate the size of array1 and array 2 as
   int x = size of array1 and int y = size of array2
Call the function as find(array1, array2, x, y)

Ví dụ

#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;
}
// Creating function named “find” for finding missing elements
void find(int array1[], int array2[],
int x, int y) {
   // Declaring a vector which stores the result
   vector<int> v(x + y);
   // Declaring an iterator traverse the vector
   vector<int>::iterator it;
   // Sorting the arrays
   sort(array1, array1 + x);
   sort(array2, array2 + y);
   // Finding the missing elements
   diff = set_difference(array1, array1 + x, array2, array2 + y, v.begin());
   //resizing the vector to the existing count
   v.resize(diff - v.begin());
   cout << "The elements present in array1[] and not in array2[]:”;
   for (diff = v.begin(); diff != v.end(); ++diff)
   cout << *diff << " ";
   cout << endl;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

The elements present in array1[] and not in array2[]: 1,7