Namespaces
Variants

std::independent_bits_engine<Engine,W,UIntType>:: independent_bits_engine

From cppreference.net

independent_bits_engine ( ) ;
(1) (depuis C++11)
explicit independent_bits_engine ( result_type s ) ;
(2) (depuis C++11)
template < class SeedSeq >
explicit independent_bits_engine ( SeedSeq & seq ) ;
(3) (depuis C++11)
explicit independent_bits_engine ( const Engine & e ) ;
(4) (depuis C++11)
explicit independent_bits_engine ( Engine && e ) ;
(5) (depuis C++11)

Construit un nouvel adaptateur de moteur pseudo-aléatoire.

1) Constructeur par défaut. Le moteur sous-jacent est également construit par défaut.
2) Construit le moteur sous-jacent avec s .
3) Construit le moteur sous-jacent avec la séquence de graines seq .
Cette surcharge participe à la résolution de surcharge seulement si Sseq satisfait aux exigences de SeedSequence .
4) Construit le moteur sous-jacent avec une copie de e .
5) Constructit par déplacement le moteur sous-jacent avec e . e conserve un état non spécifié mais valide par la suite.

Table des matières

Paramètres

s - valeur entière pour construire le moteur sous-jacent
seq - séquence de graines pour construire le moteur sous-jacent
e - moteur de nombres pseudo-aléatoires à initialiser

Exceptions

3) Si SeedSeq n'est pas std::seed_seq , lance les exceptions levées par l'appel seq.generate .

Exemple

#include <iostream>
#include <random>
int main()
{
    auto print = [](auto rem, auto engine, int count)
    {
        std::cout << rem << ": ";
        for (int i {}; i != count; ++i)
            std::cout << static_cast<unsigned>(engine()) << ' ';
        std::cout << '\n';
    };
    std::independent_bits_engine<std::mt19937, /*bits*/ 1, unsigned short>
        e1; // construit par défaut
    print("e1", e1, 8);
    std::independent_bits_engine<std::mt19937, /*bits*/ 1, unsigned int>
        e2(1); // construit avec 1
    print("e2", e2, 8);
    std::random_device rd;
    std::independent_bits_engine<std::mt19937, /*bits*/ 3, unsigned long>
        e3(rd()); // initialisé avec rd()
    print("e3", e3, 8);
    std::seed_seq s {3, 1, 4, 1, 5};
    std::independent_bits_engine<std::mt19937, /*bits*/ 3, unsigned long long>
        e4(s); // initialisé avec la séquence d'amorçage s
    print("e4", e4, 8);
}

Sortie possible :

e1: 0 0 0 1 0 1 1 1
e2: 1 1 0 0 1 1 1 1
e3: 3 1 5 4 3 2 3 4
e4: 0 2 4 4 4 3 3 6

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement correct
LWG 2181 C++11 la surcharge ( 3 ) ne lancerait pas même si l'appel à seq.generate lance propage l'exception