最終更新日時: 2025年07月12日 02時16分44秒 (JST)
Koichi Murase が更新

履歴 編集

function
<random>

# std::shuffle_order_engine::seed(C++11)

    void seed();                             // (1)
    void seed(result_type s);                // (2)
    template<class Sseq> void seed(Sseq& q); // (3)

## 概要

- (1) : 元となる乱数生成器のデフォルトのシード値で再初帰化する
- (2) : シード値を受け取って再初期化する
- (3) : シードのシーケンスを受け取って再初期化する

## 効果

各オーバーロードが持つパラメータを`arg`とした場合、

    *this = shuffle_order_engine(arg);

と同じ効果を持つ。

指定されたシード値もしくはシードのシーケンスで、エンジンの再初期化を行う。

## 戻り値

なし

## 例

    #include <iostream>
    #include <random>
    #include <array>

    int main()
    {
      // (1) デフォルトのシード値から再初期化
      {
        std::knuth_b engine;

        engine.seed();

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

      // (2) シード値を指定して再初期化
      {
        std::knuth_b engine;

        std::uint32_t seed = std::random_device()();
        engine.seed(seed);

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

      // (3) シードのシーケンスを指定して再初期化
      {
        std::knuth_b engine;

        // シードのシーケンスを作る
        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.seed(seq);

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

### 出力

    15039276
    9516009
    2488183

## バージョン

### 言語

- C++11

### 処理系

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

## 参照