Aracılığıyla paylaş


<random>

Rastgele sayı oluşturma olanaklarını tanımlayarak tekdüzen dağıtılmış rastgele sayıların oluşturulmasına olanak sağlar.

Gereksinimler

Üst Bilgi: <random>

Ad alanı: std

Not

Kitaplık ' <random> #include <initializer_list>' deyimini kullanır.

Özet

Rastgele sayı oluşturucu , sahte rastgele değerler dizisi oluşturan bir nesnedir. Belirtilen aralıkta tekdüzen olarak dağıtılmış değerler üreten bir oluşturucu, Tekdüzen Rastgele Sayı Oluşturucudur (URNG). BIR URNG işlevi görecek şekilde tasarlanmış bir sınıf şablonu, bu sınıfın bu makalenin devamında ele alınan belirli ortak özelliklere sahip olması durumunda altyapı olarak adlandırılır. BIR URNG, dağıtım tarafından tanımlanan bir şekilde dağıtılmış değerler üretmek için URNG'yi operator() dağıtıma bağımsız değişken olarak geçirerek bir dağıtımla birleştirilebilir.

Bu bağlantılar bu makalenin ana bölümlerine atlar:

Hızlı İpuçları

kullanırken <random>göz önünde bulundurmak için bazı ipuçları aşağıdadır:

  • Çoğu amaçla, URNG'ler dağıtımlara göre şekillendirilmesi gereken ham bitler üretir. (Bunun önemli bir istisnası, doğrudan bir URNG kullanmasıdır std::shuffle() .)

  • URNG veya dağıtım çalıştırmak bir değiştirme işlemi olduğundan, bir URNG veya dağıtımın tek bir örneği eşzamanlı olarak güvenli bir şekilde çağrılamaz. Daha fazla bilgi için bkz . C++ Standart Kitaplığı'nda İş Parçacığı Güvenliği.

  • Birkaç altyapının önceden tanımlanmış tür tanımları sağlanır; bir altyapı kullanılıyorsa URNG oluşturmanın tercih edilen yolu budur.

  • Çoğu uygulama için en kullanışlı eşleştirme, bu makalenin mt19937 devamında kod örneğinde gösterildiği gibi ile uniform_int_distributionaltyapıdır.

Üst bilgide aralarından <random> seçim yapabileceğiniz birçok seçenek vardır ve bunlardan herhangi biri eski C Çalışma Zamanı işlevine rand()tercih edilir. Sorunu rand() ve bu eksiklikleri nasıl <random> giderdiğini öğrenmek için bu videoya bakın.

Örnekler

Aşağıdaki kod örneğinde, belirlenemeyen bir tohumla oluşturulmuş bir oluşturucu kullanarak bu örnekte beş rastgele sayının nasıl oluşturulacağı gösterilmektedir.

#include <random>
#include <iostream>

using namespace std;

int main()
{
    random_device rd;   // non-deterministic generator
    mt19937 gen(rd());  // to seed mersenne twister.
                        // replace the call to rd() with a
                        // constant value to get repeatable
                        // results.

    for (int i = 0; i < 5; ++i) {
        cout << gen() << " "; // print the raw output of the generator.
    }
    cout << endl;
}
2430338871 3531691818 2723770500 3252414483 3632920437

Bunlar yüksek kaliteli rastgele sayılar olsa da ve bu program her çalıştırıldığında farklı olsa da, yararlı bir aralıkta olmaları gerekmez. Aralığı denetlemek için aşağıdaki kodda gösterildiği gibi tekdüzen bir dağıtım kullanın:

#include <random>
#include <iostream>

using namespace std;

int main()
{
    random_device rd;   // non-deterministic generator
    mt19937 gen(rd());  // to seed mersenne twister.
    uniform_int_distribution<> dist(1,6); // distribute results between 1 and 6 inclusive.

    for (int i = 0; i < 5; ++i) {
        cout << dist(gen) << " "; // pass the generator to the distribution.
    }
    cout << endl;
}
5 1 6 1 2

Sonraki kod örneği, bir vektör ve dizi içeriğini karıştıran tekdüzen dağıtılmış rastgele sayı oluşturucuları ile daha gerçekçi bir kullanım örnekleri kümesini gösterir.

// cl.exe /EHsc /nologo /W4 /MTd
#include <algorithm>
#include <array>
#include <iostream>
#include <random>
#include <string>
#include <vector>
#include <functional> // ref()

using namespace std;

template <typename C> void print(const C& c) {
    for (const auto& e : c) {
        cout << e << " ";
    }

    cout << endl;
}

template <class URNG>
void test(URNG& urng) {

    // Uniform distribution used with a vector
    // Distribution is [-5, 5] inclusive
    uniform_int_distribution<int> dist(-5, 5);
    vector<int> v;

    for (int i = 0; i < 20; ++i) {
        v.push_back(dist(urng));
    }

    cout << "Randomized vector: ";
    print(v);

    // Shuffle an array
    // (Notice that shuffle() takes a URNG, not a distribution)
    array<string, 26> arr = { { "H", "He", "Li", "Be", "B", "C", "N", "O", "F",
        "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc",
        "Ti", "V", "Cr", "Mn", "Fe" } };

    shuffle(arr.begin(), arr.end(), urng);

    cout << "Randomized array: ";
    print(arr);
    cout << "--" << endl;
}

int main()
{
    // First run: non-seedable, non-deterministic URNG random_device
    // Slower but crypto-secure and non-repeatable.
    random_device rd;
    cout << "Using random_device URNG:" << endl;
    test(rd);

    // Second run: simple integer seed, repeatable results
    cout << "Using constant-seed mersenne twister URNG:" << endl;
    mt19937 engine1(12345);
    test(engine1);

    // Third run: random_device as a seed, different each run
    // (Desirable for most purposes)
    cout << "Using non-deterministic-seed mersenne twister URNG:" << endl;
    mt19937 engine2(rd());
    test(engine2);

    // Fourth run: "warm-up" sequence as a seed, different each run
    // (Advanced uses, allows more than 32 bits of randomness)
    cout << "Using non-deterministic-seed \"warm-up\" sequence mersenne twister URNG:" << endl;
    array<unsigned int, mt19937::state_size> seed_data;
    generate_n(seed_data.begin(), seed_data.size(), ref(rd));
    seed_seq seq(begin(seed_data), end(seed_data));
    mt19937 engine3(seq);
    test(engine3);
}
Using random_device URNG:
Randomized vector: 5 -4 2 3 0 5 -2 0 4 2 -1 2 -4 -3 1 4 4 1 2 -2
Randomized array: O Li V K C Ti N Mg Ne Sc Cl B Cr Mn Ca Al F P Na Be Si Ar Fe S He H
--
Using constant-seed mersenne twister URNG:
Randomized vector: 3 -1 -5 0 0 5 3 -4 -3 -4 1 -3 0 -3 -2 -4 5 1 -1 -1
Randomized array: Al O Ne Si Na Be C N Cr Mn H V F Sc Mg Fe K Ca S Ti B P Ar Cl Li He
--
Using non-deterministic-seed mersenne twister URNG:
Randomized vector: 5 -4 0 2 1 -2 4 4 -4 0 0 4 -5 4 -5 -1 -3 0 0 3
Randomized array: Si Fe Al Ar Na P B Sc H F Mg Li C Ti He N Mn Be O Ca Cr V K Ne Cl S
--
Using non-deterministic-seed "warm-up" sequence mersenne twister URNG:
Randomized vector: -1 3 -2 4 1 3 0 -5 5 -5 0 0 5 0 -3 3 -4 2 5 0
Randomized array: Si C Sc H Na O S Cr K Li Al Ti Cl B Mn He Fe Ne Be Ar V P Ca N Mg F
--

Bu kod, bir test şablonu işleviyle iki farklı rastgele seçim gösterir: bir tamsayı vektörü rastgele hale getirme ve dizinlenmiş veri dizisini karıştırma. Test işlevine yapılan ilk çağrı şifreleme güvenli, belirlenemeyen, dağıtılamayan, yinelenemeyen URNG'yi random_devicekullanır. İkinci test çalıştırması, sonuçların yinelenebilir olduğu anlamına gelen belirlenimci bir 32 bit sabit tohumu ile URNG olarak kullanır mersenne_twister_engine . Üçüncü test, 32 bitlik belirleyici olmayan bir sonucu olan random_devicetohumları mersenne_twister_engine çalıştırır. Dördüncü test çalıştırması, sonuçlarla random_device dolu bir çekirdek dizisi kullanarak bunu genişletir ve bu da etkili bir şekilde 32 bit'ten fazla belirleyici olmayan rastgelelik (ancak yine de şifreleme güvenliği sağlamaz) sağlar. Daha fazla bilgi için okumaya devam edin.

Kategorilere Ayrılmış Liste

Tekdüzen Rastgele Sayı Oluşturucuları

URNG'ler genellikle şu özellikler açısından açıklanmaktadır:

  1. Dönem uzunluğu: Oluşturulan sayıların sırasını yinelemek için gereken yineleme sayısı. Ne kadar uzunsa o kadar iyi.

  2. Performans: Sayıların ne kadar hızlı oluşturulabileceği ve ne kadar bellek aldığı. Ne kadar küçük ise o kadar iyidir.

  3. Kalite: Oluşturulan sıranın gerçek rastgele sayılara ne kadar yakın olduğu. Buna genellikle "rastgelelik" denir.

Aşağıdaki bölümlerde, üst bilgide <random> sağlanan tekdüzen rastgele sayı oluşturucuları (URNG) listeleniyor.

Belirleyici Olmayan Oluşturucu

random_device Sınıf
Bir dış cihaz kullanarak belirlenemeyen, kriptografik olarak güvenli rastgele bir sıra oluşturur. Genellikle bir motorun tohumunu yapmak için kullanılır. Düşük performans, çok yüksek kalite. Daha fazla bilgi için bkz . Açıklamalar.

Önceden Tanımlanmış Parametrelerle Altyapı Türü Tanımları

Motorları ve motor bağdaştırıcılarını örneklemek için. Daha fazla bilgi için bkz . Altyapılar ve Dağıtımlar.

  • default_random_engine Varsayılan altyapı.

    typedef mt19937 default_random_engine;
    
  • knuth_b Knuth altyapısı.

    typedef shuffle_order_engine<minstd_rand0, 256> knuth_b;
    
  • minstd_rand0 1988 minimal standart motor (Lewis, Goodman ve Miller, 1969).

    typedef linear_congruential_engine<unsigned int, 16807, 0, 2147483647> minstd_rand0;
    
  • minstd_rand Minimum standart motor minstd_rand0 güncelleştirildi (Park, Miller ve Stockmeyer, 1993).

    typedef linear_congruential_engine<unsigned int, 48271, 0, 2147483647> minstd_rand;
    
  • mt19937 32 bit Mersenne twister motor (Matsumoto ve Nishimura, 1998).

    typedef mersenne_twister_engine<
        unsigned int, 32, 624, 397,
        31, 0x9908b0df,
        11, 0xffffffff,
        7, 0x9d2c5680,
        15, 0xefc60000,
        18, 1812433253> mt19937;
    
  • mt19937_64 64 bit Mersenne twister motor (Matsumoto ve Nishimura, 2000).

    typedef mersenne_twister_engine<
        unsigned long long, 64, 312, 156,
        31, 0xb5026f5aa96619e9ULL,
        29, 0x5555555555555555ULL,
        17, 0x71d67fffeda60000ULL,
        37, 0xfff7eee000000000ULL,
        43, 6364136223846793005ULL> mt19937_64;
    
  • ranlux24 24 bit RANLUX motoru (Martin Lüscher ve Fred James, 1994).

    typedef discard_block_engine<ranlux24_base, 223, 23> ranlux24;
    
  • ranlux24_base için ranlux24temel olarak kullanılır.

    typedef subtract_with_carry_engine<unsigned int, 24, 10, 24> ranlux24_base;
    
  • ranlux48 48 bit RANLUX motoru (Martin Lüscher ve Fred James, 1994).

    typedef discard_block_engine<ranlux48_base, 389, 11> ranlux48;
    
  • ranlux48_base için ranlux48temel olarak kullanılır.

    typedef subtract_with_carry_engine<unsigned long long, 48, 5, 12> ranlux48_base;
    

Altyapı Şablonları

Altyapı şablonları tek başına URNG'ler veya altyapı bağdaştırıcılarına geçirilen temel altyapılar olarak kullanılır. Bunlar genellikle önceden tanımlanmış bir altyapı tür tanımıyla oluşturulur ve bir dağıtıma geçirilir. Daha fazla bilgi için Altyapılar ve Dağıtımlar bölümüne bakın.

Veri Akışı Adı Açıklama
linear_congruential_engine Sınıf Doğrusal eşzamanlı algoritmayı kullanarak rastgele bir dizi oluşturur. En basit ve en düşük kalite.
mersenne_twister_engine Sınıf Mersenne bükücü algoritmasını kullanarak rastgele bir dizi oluşturur. Random_device sınıfı dışında en karmaşık ve en yüksek kalitedir. Çok hızlı performans.
subtract_with_carry_engine Sınıf Taşıma ile çıkarma algoritmasını kullanarak rastgele bir dizi oluşturur. üzerinde linear_congruential_enginebir geliştirme, ancak çok daha mersenne_twister_enginedüşük kalite ve performans.

Altyapı Bağdaştırıcı Şablonları

Altyapı bağdaştırıcıları, diğer (temel) altyapıları uyarlayan şablonlardır. Bunlar genellikle önceden tanımlanmış bir altyapı tür tanımıyla oluşturulur ve bir dağıtıma geçirilir. Daha fazla bilgi için Altyapılar ve Dağıtımlar bölümüne bakın.

Veri Akışı Adı Açıklama
discard_block_engine Sınıf Temel altyapısı tarafından döndürülen değerleri atarak rastgele bir sıra oluşturur.
independent_bits_engine Sınıf Temel altyapısı tarafından döndürülen değerlerden bitleri yeniden paketleyerek belirtilen sayıda bit içeren rastgele bir sıra oluşturur.
shuffle_order_engine Sınıf Temel altyapısından döndürülen değerleri yeniden sıralayarak rastgele bir sıra oluşturur.

[Altyapı Şablonları]

Rastgele Sayı Dağılımları

Aşağıdaki bölümlerde, üst bilgide <random> sağlanan dağıtımlar listeleniyor. Dağılımlar, genellikle GIRIŞ olarak URNG çıkışını kullanan ve çıkışı tanımlanmış istatistiksel bir olasılık yoğunluğu işleviyle dağıtan bir işlem sonrası mekanizmasıdır. Daha fazla bilgi için Altyapılar ve Dağıtımlar bölümüne bakın.

Tekdüzen Dağıtımlar

Veri Akışı Adı Açıklama
uniform_int_distribution Sınıf [a, b] (kapsayıcı dahil) kapalı aralıkta aralık genelinde tekdüzen bir tamsayı değeri dağılımı oluşturur.
uniform_real_distribution Sınıf Yarı açık aralıkta (a, b) (özel dahil) tekdüzen bir gerçek (kayan nokta) değer dağılımı oluşturur.
generate_canonical [0, 1) (hariç olmak üzere) arasında belirli bir duyarlık için gerçek (kayan nokta) değerlerinin eşit dağılımını oluşturur.

[Rastgele Sayı Dağılımları]

Bernoulli Dağıtımları

Veri Akışı Adı Açıklama
bernoulli_distribution Sınıf Değerlerin Bernoulli dağılımını bool üretir.
binomial_distribution Sınıf Tamsayı değerlerinin binom dağılımını oluşturur.
geometric_distribution Sınıf Tamsayı değerlerinin geometrik dağılımını oluşturur.
negative_binomial_distribution Sınıf Tamsayı değerlerinin negatif binom dağılımını üretir.

[Rastgele Sayı Dağılımları]

Normal Dağılımlar

Veri Akışı Adı Açıklama
cauchy_distribution Sınıf Gerçek (kayan nokta) değerlerin Cauchy dağılımını üretir.
chi_squared_distribution Sınıf Gerçek (kayan nokta) değerlerin kikare dağılımını oluşturur.
fisher_f_distribution Sınıf Gerçek (kayan nokta) değerlerin F dağılımını (Snedecor'un F dağılımı veya Fisher-Snedecor dağılımı olarak da bilinir) üretir.
lognormal_distribution Sınıf Gerçek (kayan nokta) değerlerin günlük normal dağılımını oluşturur.
normal_distribution Sınıf Gerçek (kayan nokta) değerlerin normal (Gauss) dağılımını üretir.
student_t_distribution Sınıf Bir Öğrencinin gerçek (kayan nokta) değerlerinin t dağılımını oluşturur.

[Rastgele Sayı Dağılımları]

Poisson Dağıtımları

Veri Akışı Adı Açıklama
exponential_distribution Sınıf Gerçek (kayan nokta) değerlerin üstel dağılımını oluşturur.
extreme_value_distribution Sınıf Gerçek (kayan nokta) değerlerin aşırı değer dağılımını oluşturur.
gamma_distribution Sınıf Gerçek (kayan nokta) değerlerin gama dağılımını oluşturur.
poisson_distribution Sınıf Tamsayı değerlerinin Poisson dağılımını oluşturur.
weibull_distribution Sınıf Gerçek (kayan nokta) değerlerin Weibull dağılımını üretir.

[Rastgele Sayı Dağılımları]

Örnekleme Dağıtımları

Veri Akışı Adı Açıklama
discrete_distribution Sınıf Ayrık bir tamsayı dağılımı oluşturur.
piecewise_constant_distribution Sınıf Gerçek (kayan nokta) değerlerin parçalı sabit dağılımını üretir.
piecewise_linear_distribution Sınıf Gerçek (kayan nokta) değerlerin parçalı doğrusal dağılımını oluşturur.

[Rastgele Sayı Dağılımları]

Yardımcı Program İşlevleri

Bu bölümde, üst bilgide <random> sağlanan genel yardımcı program işlevleri listelenir.

Veri Akışı Adı Açıklama
seed_seq Sınıf Yanlı olmayan karışık bir tohum dizisi oluşturur. Rastgele değişken akışların çoğaltılmasını önlemek için kullanılır. Birçok URNG altyapıdan örneklendiğinde kullanışlıdır.

İşleçler

Bu bölümde, üst bilgide <random> sağlanan işleçler listelenir.

Veri Akışı Adı Açıklama
operator== İşlecin sol tarafındaki URNG'nin sağ taraftaki altyapıya eşit olup olmadığını sınar.
operator!= İşlecin sol tarafındaki URNG'nin sağ taraftaki altyapıya eşit olup olmadığını sınar.
operator<< Durum bilgilerini bir akışa yazar.
operator>> Bir akıştan durum bilgilerini ayıklar.

Altyapılar ve Dağıtımlar

içinde tanımlanan bu sınıf şablonu kategorilerinin her biri hakkında bilgi için aşağıdaki bölümlere <random>bakın. Bu sınıf şablonu kategorilerinin her ikisi de bağımsız değişken olarak bir tür alır ve gerçek bağımsız değişken türü olarak izin verilen türün özelliklerini açıklamak için paylaşılan şablon parametre adlarını aşağıdaki gibi kullanır:

  • IntTypeshort, , int, long, , long long, unsigned short, unsigned intveya unsigned longunsigned long longgösterir.

  • UIntType, , unsigned intunsigned longveya unsigned long longgösterirunsigned short.

  • RealTypefloatbir , doubleveya long doublebelirtir.

Motor

Altyapı Şablonları ve Altyapı Bağdaştırıcı Şablonları , parametreleri oluşturucuyu oluşturan şablonlardır.

Altyapı, örnekleri (oluşturucular) en düşük ve en yüksek değer arasında tekdüzen olarak dağıtılmış rastgele sayıların kaynağı olarak davranan bir sınıf veya sınıf şablonudur. Altyapı bağdaştırıcısı , başka bir rastgele sayı altyapısı tarafından üretilen değerleri alıp bu değerlere bir tür algoritma uygulayarak farklı rastgelelik özelliklerine sahip bir dizi değer sunar.

Her altyapı ve altyapı bağdaştırıcısı aşağıdaki üyelere sahiptir:

  • typedefnumeric-type result_type, oluşturucunun operator()tarafından döndürülen türdür. numeric-type örneği oluşturmada şablon parametresi olarak geçirilir.

  • result_type operator()ile max()arasında min() tekdüzen olarak dağıtılan değerleri döndürür.

  • result_type min() , oluşturucunun operator()tarafından döndürülen en düşük değeri döndürür. Altyapı bağdaştırıcıları temel motorun min() sonucunu kullanır.

  • result_type max() oluşturucusunun operator()tarafından döndürülen en büyük değeri döndürür. Bir tamsayı (tamsayı değerli) türü olduğunda result_type , max() gerçekten döndürülebilecek en büyük değerdir (dahil); kayan nokta (gerçek değerli) bir tür olduğunda result_type , max() döndürülebilecek tüm değerlerden (dahil olmayan) en küçük değerdir. Altyapı bağdaştırıcıları temel motorun max() sonucunu kullanır.

  • void seed(result_type s) tohum değeri sile üreteci tohumlar. Altyapılar için imza varsayılan parametre desteği içindir void seed(result_type s = default_seed) (altyapı bağdaştırıcıları ayrı void seed()bir tanımlar, sonraki alt bölüme bakın).

  • template <class Seq> void seed(Seq& q) kullanarak seed_seqSeqüreteci tohumlar.

  • çağırılarak seed(x)çekirdeklenmiş bir oluşturucu oluşturan bağımsız değişkene result_type x sahip açık bir oluşturucu.

  • çağırılarak seed(seq)çekirdeklenmiş bir oluşturucu oluşturan bağımsız değişkene seed_seq& seq sahip açık bir oluşturucu.

  • void discard(unsigned long long count) zamanları etkili bir şekilde çağırır operator() count ve her değeri atar.

Altyapı bağdaştırıcıları ayrıca bu üyeleri de destekler (Engine altyapı bağdaştırıcısının ilk şablon parametresidir ve temel altyapının türünü belirtir):

  • Oluşturucuyu temel altyapının varsayılan oluşturucusundan başlatacak varsayılan oluşturucu.

  • bağımsız değişkenine const Engine& engsahip açık bir oluşturucu. Bu, temel motoru kullanarak kopya yapımını desteklemektir.

  • bağımsız değişkenine Engine&& engsahip açık bir oluşturucu. Bu, temel motoru kullanarak taşıma yapısını desteklemektir.

  • void seed() temel altyapının varsayılan tohum değeriyle oluşturucuyu başlatır.

  • const Engine& base() oluşturucuyu oluşturmak için kullanılan temel altyapıyı döndüren özellik işlevi.

Her altyapı, sonraki çağrıları operator()tarafından oluşturulacak değerlerin sırasını belirleyen bir durum tutar. Aynı türdeki altyapılardan örnek alınan iki oluşturucunun durumları ve operator!=kullanılarak operator== karşılaştırılabilir. İki durum eşit olarak karşılaştırılırsa, aynı değer dizisini oluştururlar. Bir nesnenin durumu, oluşturucu kullanılarak operator<< bir akışa 32 bit imzasız değerler dizisi olarak kaydedilebilir. Durum kaydedilerek değiştirilmez. Kaydedilmiş bir durum, kullanılarak operator>>aynı türdeki bir altyapıdan oluşturulan oluşturucuya okunabilir.

Dağıtım

Rastgele Sayı Dağılımları, örnekleri bir altyapıdan alınan tekdüzen dağıtılmış rastgele sayı akışını belirli bir dağılıma sahip rastgele sayı akışına dönüştüren bir sınıf veya sınıf şablonudur. Her dağıtımda aşağıdaki üyeler vardır:

  • typedefnumeric-type result_type, dağıtımın operator()tarafından döndürülen türdür. numeric-type örneği oluşturmada şablon parametresi olarak geçirilir.

  • template <class URNG> result_type operator()(URNG& gen), tekdüzen dağıtılmış rastgele değerlerin ve dağıtımın depolanan parametrelerinin kaynağı olarak kullanarak gen dağıtımın tanımına göre dağıtılan değerleri döndürür.

  • template <class URNG> result_type operator()(URNG& gen, param_type p), tekdüzen dağıtılmış rastgele değerlerin ve parametre yapısının pkaynağı olarak kullanarak gen dağıtımın tanımına uygun olarak dağıtılan değerleri döndürür.

  • typedefunspecified-type param_type, isteğe bağlı olarak 'a operator() geçirilen parametre paketidir ve döndürülen değerini oluşturmak için depolanan parametrelerin yerine kullanılır.

  • Oluşturucu const param& , depolanan parametreleri bağımsız değişkeninden başlatır.

  • param_type param() const depolanan parametreleri alır.

  • void param(const param_type&) saklı parametreleri bağımsız değişkeninden ayarlar.

  • result_type min() , dağıtımın operator()tarafından döndürülen en düşük değeri döndürür.

  • result_type max() , dağıtımın operator()tarafından döndürülen en büyük değeri döndürür. Bir tamsayı (tamsayı değerli) türü olduğunda result_type , max() gerçekten döndürülebilecek en büyük değerdir (dahil); kayan nokta (gerçek değerli) bir tür olduğunda result_type , max() döndürülebilecek tüm değerlerden (dahil olmayan) en küçük değerdir.

  • void reset() önbelleğe alınmış değerleri atar, böylece bir sonraki çağrısının sonucu, çağrıdan operator() önce altyapıdan alınan hiçbir değere bağımlı olmaz.

Parametre yapısı, bir dağıtım için gereken tüm parametreleri depolayan bir nesnedir. Şunları içerir:

  • typedefdistribution-type distribution_type, dağılımının türüdür.

  • Dağıtım oluşturucularının almasıyla aynı parametre listelerini alan bir veya daha fazla oluşturucu.

  • Dağıtımla aynı parametre erişim işlevleri.

  • Eşitlik ve eşitsizlik karşılaştırma işleçleri.

Daha fazla bilgi için, bu makalede daha önce bağlantılı olan bu makalenin altındaki başvuru alt konularına bakın.

Açıklamalar

Visual Studio'damt19937 random_devicebu karşılaştırma tablosunda gösterildiği gibi son derece yararlı iki URNG vardır:

URNG Hızlı Şifreleme güvenliği Tohumlanabilir Deterministic
mt19937 Yes Hayı Evet Evet*
random_device Hayı Evet Hayır Hayır

* Bilinen bir tohumla birlikte sağlandığında.

ISO C++ Standardının şifreleme açısından güvenli olmasını gerektirmese random_device de, Visual Studio'da şifreleme açısından güvenli olacak şekilde uygulanır. ("Kriptografik olarak güvenli" terimi garanti etmez, ancak belirli bir rastgele belirleme algoritmasının sağladığı minimum entropi düzeyini ve dolayısıyla öngörülebilirlik düzeyini ifade eder. Daha fazla bilgi için Kriptografik olarak güvenli sözderandom sayı oluşturucusunun Wikipedia makalesine bakın.) ISO C++ Standardı bunu gerektirmediğinden, diğer platformlar basit bir sahte rastgele sayı oluşturucu (kriptografik olarak güvenli değildir) olarak uygulanabilir random_device ve yalnızca başka bir oluşturucu için tohum kaynağı olarak uygun olabilir. Platformlar arası kodda kullanırken random_device bu platformların belgelerine bakın.

Tanım gereği sonuçlar random_device yeniden üretilebilir değildir ve bunun yan etkisi, diğer URNG'lerden önemli ölçüde daha yavaş çalışabilmesidir. Kod örneğinde gösterildiği gibi, şifreleme açısından güvenli bir kullanım mt19937 veya benzer bir altyapı olması gerekmeyen uygulamaların çoğu için random_deviceçağrısıyla bunu görmek isteyebilirsiniz.

Ayrıca bkz.

Üst Bilgi Dosyaları Başvurusu