最終更新日時: 2026年07月22日 11時09分53秒 (JST)
rotarymars が更新

履歴 編集

function
<random>

# std::independent_bits_engine::コンストラクタ(C++11)

    independent_bits_engine();                                           // (1)
    explicit independent_bits_engine(const Engine& e);                   // (2)
    explicit independent_bits_engine(Engine&& e);                        // (3)
    explicit independent_bits_engine(result_type s);                     // (4)
    template<class Sseq> explicit independent_bits_engine(Sseq& q);      // (5)

    independent_bits_engine(const independent_bits_engine& e) = default; // (6)
    independent_bits_engine(independent_bits_engine&& e) = default;      // (7)

## 概要

- (1) : デフォルトコンストラクタ。元となる乱数生成器を、デフォルト構築する(デフォルトシードで初期化)
- (2) : 元となる乱数生成器のコピーを作るコンストラクタ
- (3) : 元となる乱数生成器オブジェクトを受け取り、移動して保持するコンストラクタ
- (4) : 受け取ったシードで、元となる乱数生成器を初期化するコンストラクタ
- (5) : 受け取ったシードのシーケンスで、元となる乱数生成器を初期化するコンストラクタ
- (6) : コピーコンストラクタ
- (7) : ムーブコンストラクタ。可能であれば、元となる乱数生成器を移動する

## 例

    #include <iostream>
    #include <random>
    #include <cstdint>
    #include <array>
    #include <utility>

    int main()
    {
      using engine_type = std::independent_bits_engine<std::mt19937, 64, std::uint64_t>;

      // (1) デフォルト構築
      // 元となる乱数生成器を、デフォルトのシード値で初期化する
      {
        engine_type engine;

        std::uint64_t result = engine();
        std::cout << result << std::endl;
      }

      // (2) 元となる乱数生成器のコピーから構築する
      {
        std::mt19937 base_engine;
        engine_type engine(base_engine);

        std::uint64_t result = engine();
        std::cout << result << std::endl;
      }

      // (3) 元となる乱数生成器をムーブして構築する
      {
        std::mt19937 base_engine;
        engine_type engine(std::move(base_engine));

        std::uint64_t result = engine();
        std::cout << result << std::endl;
      }

      // (4) シード値を指定して構築
      {
        std::uint32_t seed = std::random_device()();
        engine_type engine(seed);

        std::uint64_t result = engine();
        std::cout << result << std::endl;
      }

      // (5) シードのシーケンスを指定して構築
      {
        // シードのシーケンスを作る
        std::random_device seed_gen;
        std::array<std::uint32_t, 100> seeds;

        for (std::uint32_t& x : seeds) {
          x = seed_gen();
        }

        std::seed_seq seq(seeds.begin(), seeds.end());

        // シードのシーケンスを指定してエンジンを初期化
        engine_type engine(seq);

        std::uint64_t result = engine();
        std::cout << result << std::endl;
      }
    }

### 出力例

    15028999435905310454
    15028999435905310454
    15028999435905310454
    2520499339942957212
    17594030327480736798

## バージョン

### 言語

- C++11

### 処理系

- Clang: ??
- GCC: 4.7.2 ✅
- ICC: ??
- Visual C++: ??

## 参照