c ++ 11中的库是可移植的吗?我避免使用rand(),因为我听说它不便携。
答案 0 :(得分:18)
如何定义“便携式”?
如果是“便携式”,则表示“将在给定相同输入的情况下生成二进制相同的随机数序列”,然后是,rand
不可移植。是的,C++ random generators是可移植的(大多数是。std::default_random_engine
或std::random_device
),因为它们实现了特定的算法。 rand
被允许为任何东西,只要它与随机数生成器不完全相同。
话虽如此,正如@PeteBecker指出的那样,分布本身并没有那么明确。因此,虽然std::mt19937
将为给定种子生成相同的值序列,但不同的std::uniform_int_distribution
s可以为相同的输入序列和范围提供不同的值。
当然,如果您需要一致性,您可以随时定义自己的发行版。
答案 1 :(得分:6)
<random>
中描述的随机数引擎对其算法有明确的要求,以确保可移植性。分发没有。
答案 2 :(得分:2)
例如,您可以使用std::mt19937 (Mersenne Twister)生成“给定相同输入的相同序列的随机数”(来自@Nicol Bolas)。你绝对不能用rand()
来做那件事,这很烦人。
相关问题: