Udostępnij za pośrednictwem


<random>

Definiuje działalność Generowanie liczb losowych umożliwia utworzenie równomiernie rozproszonej liczby losowe.

#include <random>

Podsumowanie

Element generator liczb losowych jest obiekt, który tworzy sekwencję pseudolosowego wartości.Generator, który tworzy wartości, które są równomiernie rozłożone w określonym zakresie jest jednolite generatora liczb losowych (URNG).Przeznaczone do działania jako URNG klasę szablonu jest określany jako aparat czy tej klasy ma pewne typowe cechy, które zostały omówione w tym artykule.Może być URNG — i jest zazwyczaj — w połączeniu z dystrybucji przez przekazanie URNG jako argument do dystrybucji operator() do tworzenia wartości, które są rozpowszechniane w taki sposób, który jest definiowana za pomocą dystrybucji.

Te łącza przejść do głównych sekcji tego artykułu:

  • Przykłady kodu

  • Lista kategorii

  • Aparaty i dystrybucji

  • Uwagi

Krótkie wskazówki

Oto kilka wskazówek, należy pamiętać, gdy jest używany <random>:

  • Dla większości zastosowań URNGs utworzyć pierwotne bitów, które muszą mieć kształt przy dystrybucji.(Istotnych wyjątkiem są std::shuffle() ponieważ bezpośrednio używa URNG.)

  • Pojedynczego wystąpienia URNG lub dystrybucji nie można bezpiecznie można wywołać jednocześnie, ponieważ działa URNG lub dystrybucji jest modyfikowanie operacji.Aby uzyskać więcej informacji, zobacz Bezpieczeństwo wątku w standardowej bibliotece C++.

  • Wstępnie zdefiniowane definicje typów aparatów kilka są udostępniane; jest to preferowany sposób tworzenia URNG, jeśli jest używany aparat.

  • Najbardziej przydatne parowania dla większości aplikacji jest mt19937 silnika z uniform_int_distribution, co zostało pokazane przykładowy kod później w tym artykule.

Istnieje wiele opcji do wyboru w <random> nagłówka i ich jest nieaktualna funkcji środowiska wykonawczego języka C rand().Aby uzyskać informacje o tym, co problem z rand() i w jaki sposób <random> odpowiedzi na te braki zobacz w tym wideo.

Przykłady

W poniższym przykładzie pokazano, jak można wygenerować niektóre liczby losowe w takim przypadku pięciu z nimi za pomocą generator utworzone za pomocą inicjatora niedeterministyczne.

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

Dane wyjściowe:

  

Gdy są one liczby losowe wysokiej jakości i różnych za każdym razem, gdy ten program jest uruchomiony, nie są musi być przydatne zakresu.Aby sterować z zakresu, użyj jednolite dystrybucji, jak pokazano w następującym kodzie:

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

Dane wyjściowe:

  

Następny przykładowy kod przedstawia bardziej realistyczne zestaw przypadków użycia z równomiernie rozproszonej losowe generatorów numer rekonfiguracja zawartość wektor i tablicy.

// 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);
}

Przykład danych wyjściowych i uwagi kodu

  

Ten kod ilustruje dwóch różnych randomizations — losowo wektora liczb całkowitych i losowo tablicy indeksowanej danych — przy użyciu funkcji szablonu testu.Pierwszym wywołaniu funkcji testu używa zabezpieczyć kryptografii, niedeterministyczne, nie seedable, powtarzalnych URNG random_device.Drugi test Uruchom używa mersenne_twister_engine jako URNG, z deterministyczne inicjatora stałych 32-bitowy, co oznacza wyniki są powtarzalne.Test trzeci Uruchom nasion mersenne_twister_engine z wynikiem niedeterministyczne 32-bitowe z random_device.Przebieg testu czwarte rozszerzenie to za pomocą obsługiwał sekwencji z random_device wyników, które skutecznie zapewnia powyżej losowości niedeterministyczne 32-bitowe (, ale nadal nie kryptografii secure).Aby uzyskać więcej informacji Czytaj dalej.

[Przejdź do góry strony]

Lista kategorii

Jednolite losowe generatorów numer

URNGs często są opisane w zakresie tych właściwości:

  1. Długość okresu: ile iteracji zajmie powtórzeń wygenerowany numery.Długość lepiej.

  2. Wydajność: jak szybko można wygenerować liczb i ilość pamięci zajmuje.Im mniejsza lepiej.

  3. Jakość: jak najbliższa true liczby losowe jest wygenerowany sekwencji.Jest to często "losowości".

Poniższe sekcje list jednolite losowo numer generatorów (URNGs) w <random> nagłówka.

[Przejdź do góry strony]

Generator niedeterministyczne

random_device — Klasa

Generuje niedeterministyczne bezpiecznego kryptograficznie losowych sekwencji za pomocą zewnętrznego urządzenia.Zwykle używany do generowania aparatu.Niska wydajność, bardzo wysokiej jakości.Aby uzyskać więcej informacji, zobacz uwagi.

[Przejdź do góry strony]

Definicje typów aparat z parametrami wstępnie zdefiniowanych

Do tworzenia wystąpienia aparaty i adapterów aparatu.Aby uzyskać więcej informacji, zobacz aparaty i dystrybucji.

Nazwa

Opis

default_random_engine

Wpisz definicję domyślny aparat.

typedef mt19937 default_random_engine;

knuth_b

Aparat Knuth.

typedef shuffle_order_engine<minstd_rand0, 256> knuth_b;

minstd_rand0

1988 minimalne standardowe aparat (Lewis Goodman i Miller, 1969).

typedef linear_congruential_engine<unsigned int, 16807, 0, 2147483647> minstd_rand0;

minstd_rand

Zaktualizowanego aparatu standardowe minimalne minstd_rand0 (wstrzymywanie Miller i Stockmeyer, 1993).

typedef linear_congruential_engine<unsigned int, 48271, 0, 2147483647> minstd_rand;

mt19937

32-bitowy ramach projektu Mersenne — trąba powietrzna aparat (Matsumoto i 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-bitowy ramach projektu Mersenne — trąba powietrzna aparat (Matsumoto i 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

Aparat RANLUX 24-bitowe (Martin Lüscher i James Fred, 1994).

typedef discard_block_engine<ranlux24_base, 223, 23> ranlux24;

ranlux24_base

Używany jako bazowy dla ranlux24.

typedef subtract_with_carry_engine<unsigned int, 24, 10, 24> ranlux24_base;

ranlux48

Aparat RANLUX 48-bitowe (Martin Lüscher i James Fred, 1994).

typedef discard_block_engine<ranlux48_base, 389, 11> ranlux48;

ranlux48_base

Używany jako bazowy dla ranlux48.

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

[Przejdź do góry strony]

Aparat szablonów

Aparat szablonów są używane jako autonomicznej URNGs lub jako podstawowej aparatów przekazany do silnika adapterów.Zazwyczaj te są utworzone za pomocą elementów wstępnie zdefiniowane typedef aparat i przekazany do dystrybucji.Aby uzyskać więcej informacji, zobacz aparaty i dystrybucji sekcji.

linear_congruential_engine — Klasa

Generuje losowe sekwencje przy użyciu algorytmu congruential liniowo.Najbardziej simplistic i najniższej jakości.

mersenne_twister_engine — Klasa

Generuje losowe sekwencje przy użyciu algorytmu twister w ramach projektu Mersenne.Najbardziej złożonego, i jest najwyższej jakości, z wyjątkiem klasy random_device.Bardzo szybko wydajności.

subtract_with_carry_engine — Klasa

Generuje losowe sekwencje przy użyciu algorytmu Odejmij z przenoszące.Usprawnienia w linear_congruential_engine, ale dużo niższe jakości i wydajność w porównaniu mersenne_twister_engine.

[Przejdź do góry strony]

Aparat szablonów Adapter

Aparat karty są szablony dostosowanych innych aparatów (podstawowy).Zazwyczaj te są utworzone za pomocą elementów wstępnie zdefiniowane typedef aparat i przekazany do dystrybucji.Aby uzyskać więcej informacji, zobacz aparaty i dystrybucji sekcji.

discard_block_engine — Klasa

Generuje losowe sekwencje przez odrzucenie wartości zwracane przez jego podstawową aparatu.

independent_bits_engine — Klasa

Generuje losowe sekwencji z określonej liczby bitów, przepakowaniu bitów przy użyciu wartości zwracane przez jego podstawowy aparat.

shuffle_order_engine — Klasa

Generuje losowe sekwencji, zmiana kolejności wartości zwracane z jego podstawową aparatu.

[Przejdź do początku sekcji]

[Przejdź do góry strony]

Losowo numer dystrybucji

Poniższe sekcje list dystrybucji w <random> nagłówka.Dystrybucji są mechanizm przetwarzania końcowego, zazwyczaj przy użyciu danych wyjściowych URNG jako dane wejściowe i rozpowszechnianie danych wyjściowych przez funkcję zdefiniowanych rozkładu statystycznych.Aby uzyskać więcej informacji, zobacz aparaty i dystrybucji sekcji.

[Przejdź do góry strony]

Jednolite dystrybucji

uniform_int_distribution — Klasa

Tworzy dystrybucji wartość całkowitą jednolite dla zakresu w interwale [, b] zamknięte (wraz z wartościami granicznymi-wraz z wartościami granicznymi).

uniform_real_distribution — Klasa

Tworzy jednolite rzeczywistym dystrybucji wartość (zmiennoprzecinkowa) dla zakresu w interwale [a, (b) (wraz z wartościami granicznymi otwarty).

generate_canonical

Tworzy rozdziel wartości rzeczywistych (zmiennoprzecinkowych) danego dokładności między [0, 1) (wraz z wartościami granicznymi otwarty).

[Przejdź do początku sekcji]

Rozkład Bernoulliego

bernoulli_distribution — Klasa

Tworzy rozkładu Bernoulli'ego dla bool wartości.

binomial_distribution — Klasa

Tworzy dwumianowy wartości Liczba całkowita.

geometric_distribution — Klasa

Tworzy geometryczne dystrybucji z wartości całkowitych.

negative_binomial_distribution — Klasa

Tworzy ujemny dwumianowy, z wartości całkowitych.

[Przejdź do początku sekcji]

Normalny dystrybucji

cauchy_distribution — Klasa

Tworzy rozkładu Cauchy wartości rzeczywistych (zmiennoprzecinkowych).

chi_squared_distribution — Klasa

Tworzy rozkładem wartości rzeczywistych (zmiennoprzecinkowych).

fisher_f_distribution — Klasa

Tworzy rozkładu F (znanego także jako jego Snedecor F dystrybucji lub dystrybucji Fishera — Snedecor) wartości rzeczywistych (zmiennoprzecinkowych).

lognormal_distribution — Klasa

Tworzy dziennik normalny rozkład wartości rzeczywistych (zmiennoprzecinkowych).

normal_distribution — Klasa

Tworzy normalnego dystrybucji (gaussowskie) wartości rzeczywistych (zmiennoprzecinkowych).

student_t_distribution — Klasa

Tworzy studenta t-dystrybucji wartości rzeczywistych (zmiennoprzecinkowych).

[Przejdź do początku sekcji]

Rozkład Poissona

exponential_distribution — Klasa

Tworzy wykładniczej dystrybucji wartości rzeczywistych (zmiennoprzecinkowych).

extreme_value_distribution — Klasa

Tworzy wartość extreme dystrybucji wartości rzeczywistych (zmiennoprzecinkowych).

gamma_distribution — Klasa

Tworzy rozkładu gamma wartości rzeczywistych (zmiennoprzecinkowych).

poisson_distribution — Klasa

Tworzy rozkładu Poissona z wartości całkowitych.

weibull_distribution — Klasa

Tworzy rozkładu Weibulla wartości rzeczywistych (zmiennoprzecinkowych).

[Przejdź do początku sekcji]

Rozkład próbki

discrete_distribution — Klasa

Tworzy dystrybucji dyskretnych liczbę całkowitą.

piecewise_constant_distribution — Klasa

Tworzy piecewise dystrybucji stałej wartości rzeczywistych (zmiennoprzecinkowych).

piecewise_linear_distribution — Klasa

Tworzy piecewise liniowo dystrybucji wartości rzeczywistych (zmiennoprzecinkowych).

[Przejdź do początku sekcji]

[Przejdź do góry strony]

Funkcje pomocnicze

Ta sekcja zawiera listę funkcji narzędzia ogólne zawarte w <random> nagłówka.

seed_seq — Klasa

Generuje sekwencję-obciążona inicjatora zaszyfrowany.Używany w celu uniknięcia replikacji losowe variate strumieni.Przydatne, gdy URNGs wiele wystąpień z aparatów.

Operatory

W tej sekcji wyświetla operatorów w <random> nagłówka.

operator==

Sprawdza, czy URNG po lewej stronie operatora jest taki sam, jak aparat po prawej stronie.

operator!=

Sprawdza, czy URNG po lewej stronie operatora nie równa się aparatu po prawej stronie.

operator<<

Zapisuje informacje o stanie w strumieniu.

operator>>

Wyodrębnia informacje o stanie ze strumienia.

[Przejdź do góry strony]

Aparaty i dystrybucji

Można znaleźć w następujących sekcjach informacje dotyczące każdej z tych kategorii klasy szablonu zdefiniowany w <random>.Obu tych kategoriach klasy szablonu podejmuje typu jako argumentu oraz nazwy parametrów szablonu współużytkowanego do opisu właściwości typu, które są dozwolone jako typ argumentu rzeczywistych, w następujący sposób:

  • IntTypeindicates a short, int, long, long long, unsigned short, unsigned int, unsigned long, or unsigned long long.

  • UIntTypeindicates unsigned short, unsigned int, unsigned long, or unsigned long long.

  • RealTypeWskazuje float, double, lub long double.

Silniki

Aparaty i silnika adapterów szablonów, której parametry dostosować generator utworzone.

Aparat jest klasy lub klasy szablonu, którego wystąpienia (generatorów) pełnić rolę źródła liczby losowe równomiernie rozłożone wartość minimalną i maksymalną.Adapter aparat oferuje szereg wartości, które mają różne losowości właściwości według wartości biorąc utworzonej przez niektóre inne losowe aparat numer i stosowanie algorytm pewnego rodzaju do tych wartości.

Każdy aparat i aparatu łącznik ma następujących elementów:

  • typedef numeric-type result_typejest to typ zwracany przez generator operator().numeric-type Została przekazana jako parametr szablonu przy tworzeniu wystąpienia.

  • result_type operator()Zwraca wartości, które mogą być równomiernie rozłożone pomiędzy min() i max().

  • result_type min()Zwraca wartość minimalna, który jest zwracany przez generator operator().Aparat adapterów korzystać z podstawową aparatu min() wynik.

  • result_type max()Zwraca wartość maksymalna, który jest zwracany przez generator operator().Gdy result_type jest typem całkowitym (wartości całkowitych) max() jest maksymalna wartość, która faktycznie można zwrócić (włącznie); Po result_type jest zmiennoprzecinkowych typu (zwracającej real), max() jest najmniejsza wartość większą niż wszystkich wartości, które mogą być zwrócone (bez-wraz z wartościami granicznymi).Aparat adapterów korzystać z podstawową aparatu max() wynik.

  • void seed(result_type s)generator z wartością inicjatora nasiona s.Dla aparatów, podpis jest void seed(result_type s = default_seed) obsługi parametr domyślny (adapterów aparat zdefiniować oddzielne void seed(), zobacz podsekcji).

  • template <class Seq> void seed(Seq& q) seeds the generator by using a seed_seqSeq.

  • Jawne konstruktora z argumentem result_type x który tworzy generator obsługiwany tak, jakby przez wywołanie elementu seed(x).

  • Jawne konstruktora z argumentem seed_seq& seq który tworzy generator obsługiwany tak, jakby przez wywołanie elementu seed(seq).

  • void discard(unsigned long long count) effectively calls operator()count times and discards each value.

Aparat adapterów obsługuje również te elementy członkowskie (Engine jest pierwszy parametr szablonu adaptera aparat wyznaczające aparat bazowy typ):

  • Domyślny konstruktor zainicjowania generatora tak, jakby z aparat podstawową domyślnego konstruktora.

  • Jawne konstruktora z argumentem const Engine& eng.Jest to do obsługi tworzenia kopii za pomocą aparatu podstawowy.

  • Jawne konstruktora z argumentem Engine&& eng.Ma to obsługuje konstruowania przenoszenia za pomocą aparatu podstawowy.

  • void seed()które inicjuje generator z wartością inicjatora domyślny aparat podstawowy.

  • const Engine& base()Właściwość funkcję, która zwraca podstawowy aparat, który został użyty do budowy generatora.

Każdy silnik utrzymuje stanu określający kolejność wartości, które będą generowane przez kolejnych wywołań operator().Stany generatorów dwa wystąpienia z aparatów tego samego typu można porównać przy użyciu operator== i operator!=.Jeśli porównać dwa stany jako równe, wygeneruje taką samą sekwencję wartości.Stan obiektu można zapisać w strumieniu jako sekwencja wartości bez znaku 32-bitowych przy użyciu operator<< generatora.Stan nie ulega zmianie po zapisaniu go.Zapisanego stanu mogą być odczytywane w generator utworzonych na podstawie tego samego typu silnika przy użyciu operator>>.

[Przejdź do góry strony]

Dystrybucji

Element dystrybucji jest klasy lub szablonu klasy, których wystąpienia transform strumień równomiernie rozproszonej liczby losowe uzyskany z aparatu na strumień liczby losowe, która ma określoną dystrybucji.Każdy dystrybucji zawiera następujące elementy:

  • typedef numeric-type result_typeTyp zwracany przez dystrybucji jest operator().numeric-type Została przekazana jako parametr szablonu przy tworzeniu wystąpienia.

  • template <class URNG> result_type operator()(URNG& gen)Zwraca wartości, które są rozpowszechniane zgodnie z definicją dystrybucji, korzystając z gen jako źródło równomiernie rozproszonej losowych wartości i zapisana parametry rozkładu.

  • template <class URNG> result_type operator()(URNG& gen, param_type p)Zwraca wartości dystrybuowane zgodnie z definicją dystrybucji, za pomocą gen jako źródło równomiernie rozproszonej losowych wartości i struktury parametrów p.

  • typedef unspecified-type param_typePakiet parametrów opcjonalnie przekazania do operator() i służy do generowania jego wartość zwracana zamiast przechowywane parametry.

  • Element const param& Konstruktor inicjuje przechowywane parametry z jej argument.

  • param_type param() constpobiera parametry składowanej.

  • void param(const param_type&)Ustawia parametry przechowywane z jej argument.

  • result_type min()Zwraca minimalną wartość zwracaną przez dystrybucji operator().

  • result_type max()Zwraca maksymalną wartość zwracaną przez dystrybucji operator().Gdy result_type jest typem całkowitym (wartości całkowitych) max() jest maksymalna wartość, która faktycznie można zwrócić (włącznie); Po result_type jest zmiennoprzecinkowych typu (zwracającej real), max() jest najmniejsza wartość większą niż wszystkich wartości, które mogą być zwrócone (bez-wraz z wartościami granicznymi).

  • void reset()odrzuca wszelkie wartości pamięci podręcznej, tak aby wyniku następnym wywołaniu operator() nie zależy od wartości uzyskane z aparatu przed wywołaniem.

Struktura parametru jest obiekt, który przechowuje wszystkie parametry niezbędnych do dystrybucji.Zawiera:

  • typedef distribution-type distribution_type, który jest typem jego dystrybucji.

  • Wyświetla co najmniej jeden konstruktorów ten sam parametr jako stopień wykorzystania konstruktorów dystrybucji.

  • Dostęp do parametru funkcji dystrybucji.

  • Operatory porównania równości i nierówności.

Aby uzyskać więcej informacji zobacz tematy podrzędne odwołania poniżej tego, połączone wcześniej w tym artykule.

[Przejdź do góry strony]

Uwagi

Istnieją dwie URNGs bardzo przydatne w programie Visual Studio —mt19937 i random_device, jak pokazano w tej tabeli porównania:

URNG

Szybkie?

Kryptografii zabezpieczyć?

Seedable?

Deterministyczne?

mt19937

Tak

Nie

Tak

Tak*

random_device

Nie

Tak

Nie

Nie

* Jeśli dołączonym do znanego inicjatora.

Chociaż ISO C++ Standard nie wymaga random_device być kryptograficznie bezpieczne, w programie Visual Studio jest zaimplementowana aby kryptograficznie można zabezpieczyć.(Termin "kryptograficznie bezpiecznego" oznacza gwarancji, ale odwołuje się do minimalnego poziomu entropii — i w związku z tym, poziom przewidywalność — zapewnia to algorytm danego losowe generowanie.Aby uzyskać więcej informacji, zobacz artykuł Wikipedia kryptograficznie bezpiecznego generator liczb pseudorandom.) Ponieważ ISO C++ Standard nie wymaga to, innych platform może wdrożyć random_device jako proste pseudolosowego generator liczb (nie kryptograficznie bezpieczny) i maja tylko umożliwiać jako źródło inicjatora generator innego.Zapoznaj się z dokumentacją na te platformy podczas korzystania z random_device w kodzie między platformami.

Zgodnie z definicją random_device wyniki nie są do odtworzenia, a efekt po stronie jest, że może być znacznie wolniej niż innych URNGs.Większość aplikacji, które nie są wymagane, aby kryptograficznie można zabezpieczyć użyj mt19937 lub podobny silnika, chociaż warto ją zalążek w wyniku wywołania random_device, co zostało pokazane przykładowy kod.

[Przejdź do góry strony]

Zobacz też

Inne zasoby

Pliki nagłówkowe standardowej biblioteki języka C++