C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++でSTLを使用して、最初の配列に存在し、2番目には存在しない要素


2つの配列があります。タスクは、C ++の標準テンプレートライブラリ(STL)を使用して、2つの配列を比較し、最初の配列には存在するが2番目の配列には存在しない数値を見つけることです。

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

以下のプログラムで使用されているアプローチは次のとおりです 次の-

  • このプログラムでは、最初の配列には存在するが、2番目の配列には存在しない要素を検索します。
  • これを行うために、最初に2つの変数を初期化します。次に、「find」という名前の関数を作成して、配列2にはなく配列1にある要素を検索します。
  • 関数では、結果を格納するためにベクトルを宣言し(ベクトルは動的配列と同じであり、要素が挿入または削除されたときに自動的にサイズを変更できます)、ベクトルをトラバースするイテレーターも宣言します。
  • ここで、set_difference()メソッドを使用して配列を並べ替え、欠落している要素を見つけ、結果に応じてベクトルのサイズを変更して値を保存し、その後ソリューションを出力します

標準テンプレートライブラリ(STL)では、set_difference()メソッドを使用して「array1-array2」を見つけることができます。 2つのセットの違いは、最初のセットには存在するが、2番目のセットには存在しない要素によって形成されます。関数によってコピーされる要素は、常に同じ順序で最初の範囲から取得されます。両方の範囲の要素はすでに注文されている必要があります。

構文

set_difference()の構文は-

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

アルゴリズム

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)

#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;
}

出力

上記のコードを実行すると、次の出力が生成されます-

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

  1. C++の配列の最小値と2番目に小さい値の最大合計

    このチュートリアルでは、配列内の最小値と2番目に小さい値の最大合計を見つけるプログラムについて説明します。 このために、整数を含む配列が提供されます。私たちのタスクは、配列のすべての可能な反復で最小要素と2番目に小さい要素の最大合計を見つけることです。 例 #include <bits/stdc++.h> using namespace std; //returning maximum sum of smallest and //second smallest elements int pairWithMaxSum(int arr[], int N) {    

  2. アレイが回文であるかどうか、またはC++でSTLを使用していないかどうかを確認するプログラム

    n個の整数の配列arr[n]が与えられた場合、タスクは配列が回文であるかどうかを見つけることです。 C++でSTLを使用して指定されたタスクを実行する必要があります。 C ++には、STL(標準テンプレートライブラリ)の機能があります。これは、データ構造と、スタック、キュー、リストなどのいくつかの機能を提供するために使用されるC ++テンプレートクラスのセットです。これらを使用するには、知識が必要です。テンプレートクラスの。 回文は、シーケンスの前または後ろから同じように読み取られるシーケンスです。回文の簡単な例としては、-MADAM、RACECARなどがあります。配列は、以下の例のような