名前空間
変種
操作

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

From cppreference.com
 
 
 
 
 
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 を使用して基底となるエンジンを構築します。
このオーバーロードは、SseqSeedSequence の要件を満たす場合にのみ、オーバーロード解決に参加します。
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; // 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);
}

実行結果の例

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 適用対象 公開された動作 正しい動作
LWG 2181 C++11 オーバーロード (3) は、`seq.generate` の呼び出しがスローする場合でもスローしませんでした。 例外を伝播させます。
English 日本語 中文(简体) 中文(繁體)