Namespaces
Variants

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

From cppreference.net

independent_bits_engine ( ) ;
(1) (начиная с C++11)
explicit independent_bits_engine ( result_type s ) ;
(2) (начиная с C++11)
template < class SeedSeq >
explicit independent_bits_engine ( SeedSeq & seq ) ;
(3) (начиная с C++11)
explicit independent_bits_engine ( const Engine & e ) ;
(4) (начиная с C++11)
explicit independent_bits_engine ( Engine && e ) ;
(5) (начиная с C++11)

Создает новый адаптер псевдослучайного механизма.

1) Конструктор по умолчанию. Базовый движок также создается конструктором по умолчанию.
2) Конструирует базовый движок с s .
3) Конструирует базовый движок с последовательностью инициализации seq .
Эта перегрузка участвует в разрешении перегрузки только если Sseq удовлетворяет требованиям SeedSequence .
4) Создает базовый движок с копией e .
5) Перемещающий конструктор создает базовый движок с помощью e . e после этого находится в неопределенном, но корректном состоянии.

Содержание

Параметры

s - целочисленное значение для инициализации базового движка
seq - последовательность инициализации для создания базового движка
e - генератор псевдослучайных чисел для инициализации

Исключения

3) Если SeedSeq не является std::seed_seq , выбрасывает исключения, выброшенные вызовом seq.generate .

Пример

#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; // конструктор по умолчанию
    print("e1", e1, 8);
    std::independent_bits_engine<std::mt19937, /*bits*/ 1, unsigned int>
        e2(1); // создан с 1
    print("e2", e2, 8);
    std::random_device rd;
    std::independent_bits_engine<std::mt19937, /*bits*/ 3, unsigned long>
        e3(rd()); // инициализирован с 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); // инициализирован с seed-sequence s
    print("e4", e4, 8);
}

Возможный вывод:

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

Отчеты о дефектах

Следующие отчеты об изменениях в поведении, являющиеся дефектными, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 2181 C++11 перегрузка ( 3 ) не генерировала исключение, даже если вызов seq.generate генерирует исключение пробрасывает исключение