最終更新日時:
が更新

履歴 編集

class template
<random>

std::seed_seq(C++11)

namespace std {
  class seed_seq;
}

概要

seed_seqクラスは、擬似乱数を生成するためのシード列を表現するためのクラスである。
シード列は、32ビット整数のvectorとして表現される。

擬似乱数は一つの値をシードとして使用することもできるが、より多くの乱雑さ(エントロピー)が必要な場合に、複数のシードで擬似乱数を初期化するためにこのクラスを使用する。

メンバ関数

構築

名前 説明 対応バージョン
(constructor) コンストラクタ C++11
~seed_seq() = default; デストラクタ C++11
void operator=(const seed_seq&) = delete; 代入演算子。代入不可 C++11

生成

名前 説明 対応バージョン
generate シード列を生成する C++11

特性

名前 説明 対応バージョン
size シード列の要素数を取得する C++11
param シード列を取得する C++11

メンバ型

説明 対応バージョン
result_type シードを表す整数型 uint_least32_t C++11

以下は、メルセンヌ・ツイスター法による擬似乱数生成器を、状態シーケンスのサイズ分のシード列で初期化する例である。

#include <iostream>
#include <array>
#include <algorithm>
#include <functional>
#include <random>

int main()
{
  // 擬似乱数生成器の状態シーケンスのサイズ分、
  // シードを用意する
  std::array<
    std::seed_seq::result_type,
    std::mt19937::state_size
  > seed_data;

  // 非決定的な乱数でシード列を構築する
  std::random_device seed_gen;
  std::generate(seed_data.begin(), seed_data.end(), std::ref(seed_gen));

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

  // 擬似乱数生成器をシード列で初期化
  std::mt19937 engine(seq);

  // 乱数生成
  for (int i = 0; i < 10; ++i) {
    std::uint32_t result = engine();
    std::cout << result << std::endl;
  }
}

出力

2454004218
3605965574
154830518
2773897806
2068951439
2231513109
607824
726899798
1108321733
2723491878

バージョン

言語

  • C++11

処理系

参照