Bagikan melalui


Kelas uniform_int_distribution

Menghasilkan distribusi bilangan bulat seragam (setiap nilai sama-sama mungkin) dalam rentang output yang inklusif-inklusif.

Sintaks

template<class IntType = int>
   class uniform_int_distribution {
public:
   // types
   typedef IntType result_type;
   struct param_type;

   // constructors and reset functions
   explicit uniform_int_distribution(
      result_type a = 0, result_type b = numeric_limits<result_type>::max());
   explicit uniform_int_distribution(const param_type& parm);
   void reset();

   // generating functions
   template <class URNG>
      result_type operator()(URNG& gen);
   template <class URNG>
      result_type operator()(URNG& gen, const param_type& parm);

   // property functions
   result_type a() const;
   result_type b() const;
   param_type param() const;
   void param(const param_type& parm);
   result_type min() const;
   result_type max() const;
};

Parameter

IntType
Jenis hasil bilangan bulat, default ke int. Untuk jenis yang mungkin, lihat acak>.<

Keterangan

Templat kelas menjelaskan distribusi inklusif-inklusif yang menghasilkan nilai jenis integral yang ditentukan pengguna dengan distribusi sehingga setiap nilai sama-sama mungkin. Tabel berikut ini menautkan ke artikel tentang masing-masing anggota.

uniform_int_distribution
param_type

Anggota a() properti mengembalikan batas minimum distribusi yang saat ini disimpan, sementara b() mengembalikan batas maksimum yang saat ini disimpan. Untuk kelas distribusi ini, nilai minimum dan maksimum ini sama dengan yang dikembalikan oleh fungsi min() properti umum dan max().

Anggota param() properti menetapkan atau mengembalikan paket parameter distribusi tersimpan param_type .

Fungsi min() anggota dan max() mengembalikan hasil sekecil mungkin dan hasil terbesar yang mungkin, masing-masing.

Fungsi reset() anggota membuang nilai cache apa pun, sehingga hasil panggilan operator() berikutnya tidak bergantung pada nilai apa pun yang diperoleh dari mesin sebelum panggilan.

Fungsi operator() anggota mengembalikan nilai yang dihasilkan berikutnya berdasarkan mesin URNG, baik dari paket parameter saat ini, atau paket parameter yang ditentukan.

Untuk informasi selengkapnya tentang kelas distribusi dan anggotanya, lihat acak>.<

Contoh

// compile with: /EHsc /W4
#include <random>
#include <iostream>
#include <iomanip>
#include <string>
#include <map>

void test(const int a, const int b, const int s) {

    // uncomment to use a non-deterministic seed
    //    std::random_device rd;
    //    std::mt19937 gen(rd());
    std::mt19937 gen(1729);

    std::uniform_int_distribution<> distr(a, b);

    std::cout << "lower bound == " << distr.a() << std::endl;
    std::cout << "upper bound == " << distr.b() << std::endl;

    // generate the distribution as a histogram
    std::map<int, int> histogram;
    for (int i = 0; i < s; ++i) {
        ++histogram[distr(gen)];
    }

    // print results
    std::cout << "Distribution for " << s << " samples:" << std::endl;
    for (const auto& elem : histogram) {
        std::cout << std::setw(5) << elem.first << ' ' << std::string(elem.second, ':') << std::endl;
    }
    std::cout << std::endl;
}

int main()
{
    int a_dist = 1;
    int b_dist = 10;

    int samples = 100;

    std::cout << "Use CTRL-Z to bypass data entry and run using default values." << std::endl;
    std::cout << "Enter an integer value for the lower bound of the distribution: ";
    std::cin >> a_dist;
    std::cout << "Enter an integer value for the upper bound of the distribution: ";
    std::cin >> b_dist;
    std::cout << "Enter an integer value for the sample count: ";
    std::cin >> samples;

    test(a_dist, b_dist, samples);
}
Use CTRL-Z to bypass data entry and run using default values.
Enter an integer value for the lower bound of the distribution: 0
Enter an integer value for the upper bound of the distribution: 12
Enter an integer value for the sample count: 200
lower bound == 0
upper bound == 12
Distribution for 200 samples:
    0 :::::::::::::::
    1 :::::::::::::::::::::
    2 ::::::::::::::::::
    3 :::::::::::::::
    4 :::::::
    5 :::::::::::::::::::::
    6 :::::::::::::
    7 ::::::::::
    8 :::::::::::::::
    9 :::::::::::::
   10 ::::::::::::::::::::::
   11 :::::::::::::
   12 :::::::::::::::::

Persyaratan

Header:<acak>

Namespace: std

uniform_int_distribution::uniform_int_distribution

Membangun distribusi.

explicit uniform_int_distribution(
   result_type a = 0, result_type b = std::numeric_limits<result_type>::max());
explicit uniform_int_distribution(const param_type& parm);

Parameter

a
Batas bawah untuk nilai acak, inklusif.

b
Batas atas untuk nilai acak, inklusif.

parm
Struktur yang param_type digunakan untuk membangun distribusi.

Keterangan

Prasyarat:a ≤ b

Konstruktor pertama membuat objek yang menyimpan nilai menyimpan nilai a dan yang nilai b tersimpannya menyimpan nilai b.

Konstruktor kedua membuat objek yang parameter tersimpan diinisialisasi dari parm. Anda dapat memperoleh dan mengatur parameter saat ini dari distribusi yang ada dengan memanggil param() fungsi anggota.

uniform_int_distribution::p aram_type

Menyimpan parameter distribusi.

struct param_type {
   typedef uniform_int_distribution<result_type> distribution_type;
   param_type(
      result_type a = 0, result_type b = std::numeric_limits<result_type>::max());
   result_type a() const;
   result_type b() const;

   bool operator==(const param_type& right) const;
   bool operator!=(const param_type& right) const;
   };

Parameter

a
Batas bawah untuk nilai acak, inklusif.

b
Batas atas untuk nilai acak, inklusif.

right
Objek param_type untuk dibandingkan dengan ini.

Keterangan

Prasyarat:a ≤ b

Struktur ini dapat diteruskan ke konstruktor kelas distribusi saat instansiasi, ke param() fungsi anggota untuk mengatur parameter tersimpan dari distribusi yang ada, dan untuk operator() digunakan sebagai pengganti parameter tersimpan.

Baca juga

<random>