【发布时间】:2014-04-26 16:47:16
【问题描述】:
我有一个 C++11 程序,它需要创建几个独立的随机生成器,供不同线程在并行计算中使用。这些生成器应该使用不同的种子值进行初始化,以便它们都产生不同的伪随机序列。
我看到有一个 std::seed_seq 类似乎是为此目的,但目前尚不清楚构建一个的正确方法是什么。我见过的例子,比如the one on cppreference.com,用程序中硬编码的几个整数常量来初始化它:
std::seed_seq seq{1,2,3,4,5};
我怀疑这实际上是推荐的最佳做法,所以我想知道推荐的做法是什么。特别是:
- 既然
seed_seq可以用任意数量的整数来初始化,那么它的初始化列表的长度有什么意义呢?如果我想为 100 个随机生成器生成种子,是否需要用 100 个整数初始化我的seed_seq? - 如果初始化列表的长度不必与我打算生成的种子数量相匹配,是否可以仅使用 一个 整数初始化
seed_seq,然后将其用于产生大量种子? - 如何使用 no 整数进行初始化,即使用默认构造函数? (当然,这意味着我每次都会得到相同的种子。)
- 如果可以从单个整数构造
seed_seq,然后从中生成大量种子,那么使用seed_seq而不是普通的随机生成器有什么好处?为什么不直接从那个整数构造一个std::mt19937并使用 that 为其他生成器生成种子值?
【问题讨论】: