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

C++でSTLを使用して配列をシャッフルします


ここでは、C++でのShuffleとrandom_shuffleを確認します。これらの関数は、C++で配列要素をシャッフルするために使用されます。配列の代わりにベクトルを使用することもできます。使用法は似ています。最初にrandom_shuffle()を見てみましょう。範囲[左、右)の要素をランダムに再配置するために使用されます。この関数は、各要素の位置をランダムに選択されたいくつかの位置の位置とランダムに交換します。

すべての場合にどの要素が使用されるかを示すために、ランダムジェネレーター関数を提供できます。一部を提供しない場合は、独自のランダムジェネレーター関数を使用します。

#include <bits/stdc++.h>
using namespace std;
int myRandomGenerator(int j) {
   return rand() % j;
}
main() {
   srand(unsigned(time(0)));
   vector<int> arr;
   for (int j = 1; j < 20; ++j) //generate 20 numbers and add them into vector arr
   arr.push_back(j);
   random_shuffle(arr.begin(), arr.end()); //use inbuilt random function to shuffle
   cout << "arr elements:";
   for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
   cout << ' ' << *i;
   cout << endl;
   // using myRandomGenerator
   random_shuffle(arr.begin(), arr.end(), myRandomGenerator);
   cout << "arr elements:";
   for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
   cout << ' ' << *i;
   cout << endl;
}

出力

arr elements: 5 14 15 6 3 16 13 12 10 2 4 1 17 9 18 11 7 8 19
arr elements: 8 10 5 6 14 1 15 3 19 16 13 18 7 9 4 12 11 17 2

ここで、shuffle()関数とは何かを見てみましょう。これは、範囲[左、右)の要素を再配置するためにも使用されます。無作為に。 1つの均一な乱数ジェネレータが必要です。

#include <bits/stdc++.h>
using namespace std;
main() {
   vector<int> arr;
   unsigned seed = 0;
   for (int j = 1; j < 20; ++j) //generate 20 numbers and add them into vector arr
   arr.push_back(j);
   shuffle(arr.begin(), arr.end(), default_random_engine(seed));
   cout << "arr elements:";
   for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
   cout << ' ' << *i;
   cout << endl;
}

出力

arr elements: 19 7 5 6 12 4 13 3 1 17 11 14 18 2 8 15 9 10 16

random_shuffle()とshuffle()の唯一の違いは、random_shuffle()がrand()関数を使用してランダムなインデックスを生成し、shuffle()が均一な乱数ジェネレーターを使用することです。ただし、random_shuffle()を使用して均一な乱数ジェネレーターを渡すと、ある種の結果が生成されます。


  1. C++でのみ配列要素を使用して配列を等化する

    この問題では、n個の要素の配列が与えられます。私たちのタスクは、要素のみを使用して配列を等化する操作の数をカウントするプログラムを作成することです。 配列のすべての要素を等しくするために実行される加算または減算演算の数を数える必要があります。 問題を理解するために例を見てみましょう 入力: arr [] ={4、0、3、1、2} 出力: 3 説明: 等しい値は2になります。 全体の合計は同じになります。 arr [3]の値から1を取り、それをarr[1]の値に追加します。 次に、arr [0]の値から2を取得し、それをarr[1]の値に追加します。 ソリューションアプローチ

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

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