std::independent_bits_engine<Engine,W,UIntType>::independent_bits_engine
Von cppreference.com
< cpp | numeric | random | independent bits engine
| independent_bits_engine(); |
(1) | (seit C++11) |
| explicit independent_bits_engine( result_type s ); |
(2) | (seit C++11) |
| template< class SeedSeq > explicit independent_bits_engine( SeedSeq& seq ); |
(3) | (seit C++11) |
| explicit independent_bits_engine( const Engine& e ); |
(4) | (seit C++11) |
| explicit independent_bits_engine( Engine&& e ); |
(5) | (seit C++11) |
Konstruiert eine neue Pseudo-Zufallszahlengenerator-Adaption.
1) Standardkonstruktor. Die zugrundeliegende Engine wird ebenfalls standardmäßig konstruiert.
2) Konstruiert die zugrundeliegende Engine mit s.
3) Konstruiert die zugrundeliegende Engine mit der Seed-Sequenz seq.
Diese Überladung nimmt an der Überladungsauflösung teil, nur wenn
Sseq die Anforderungen an SeedSequence erfüllt.4) Konstruiert die zugrundeliegende Engine mit einer Kopie von e.
5) Verschiebt die zugrundeliegende Engine mit e. e enthält danach einen nicht spezifizierten, aber gültigen Zustand.
Inhalt |
[bearbeiten] Parameter
| s | - | Ganzzahliger Wert zum Konstruieren der zugrundeliegenden Engine |
| seq | - | Seed-Sequenz zum Konstruieren der zugrundeliegenden Engine |
| e | - | Pseudo-Zufallszahlengenerator-Engine zur Initialisierung |
[bearbeiten] Exceptions
3) Wenn
SeedSeq nicht std::seed_seq ist, werden die Ausnahmen weitergegeben, die vom Aufruf von seq.generate ausgelöst werden.[bearbeiten] Beispiel
Führen Sie diesen Code aus
#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; // default-constructed print("e1", e1, 8); std::independent_bits_engine<std::mt19937, /*bits*/ 1, unsigned int> e2(1); // constructed with 1 print("e2", e2, 8); std::random_device rd; std::independent_bits_engine<std::mt19937, /*bits*/ 3, unsigned long> e3(rd()); // seeded with 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); // seeded with seed-sequence s print("e4", e4, 8); }
Mögliche Ausgabe
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
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2181 | C++11 | Die Überladung (3) würde keine Ausnahme auslösen, selbst wenn der Aufruf von seq.generate eine Ausnahme auslöst. |
leitet die Ausnahme weiter. |