std::independent_bits_engine<Engine,W,UIntType>:: independent_bits_engine
From cppreference.net
<
cpp
|
numeric
|
random
|
independent bits engine
|
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
генерирует исключение
|
пробрасывает исключение |