8

c++11中的库是可移植的吗?我避免使用 rand() 因为我听说它不可移植。

4

3 回答 3

17

你如何定义“便携”?

如果通过“便携”,您的意思是“在给定相同输入的情况下将产生二进制相同的随机数序列”,那么是的,rand它不是便携的。是的,C++ 随机生成器是可移植的(其中大多数。不是std::default_random_enginestd::random_device),因为它们实现了特定的算法。rand可以是任何东西,只要它不完全不同于随机数生成器。

话虽这么说,正如@PeteBecker 指出的那样,分布本身并没有那么明确。因此,虽然std::mt19937将为给定的种子产生相同的值序列,但不同std::uniform_int_distribution的 s 可以为相同的输入序列和范围提供不同的值。

当然,如果您需要一致性,您可以随时定义自己的分布。

于 2013-02-12T20:11:59.110 回答
6

中描述的随机数引擎<random>对其算法有明确的要求,以确保可移植性。分布没有。

于 2013-02-12T20:47:24.960 回答
2

例如,您可以使用std::mt19937 (Mersenne Twister)生成“给定相同输入的相同随机数序列”(来自@Nicol Bolas)。你绝对不能这样做,rand()这很烦人。

相关问题:

于 2013-02-12T20:50:54.013 回答