我将std::random_shuffle
函数与自定义随机数生成器一起使用,该生成器针对同一种子在所有编译器中返回相同的随机数序列。
但是,我担心std::random_shuffle
在不同的编译器之间可能不会使用相同的算法,因此,对于相同的种子,结果将不会相同。
我可以依靠std::random_shuffle
在不同的编译器上以相同的随机数序列产生相同的输出吗?如果没有,还有其他选择吗?
不使用C++ 11或Boost。
最佳答案
通过阅读C++ 11标准中的“25.3.12 Random shuffle”(我在这里拥有的书),我可以得出结论,严格来说,不能保证。该算法的唯一要求是“这些元素的每个可能排列具有相同的出现概率”。例如,它不必前后交换元素,并且迭代器是随机访问迭代器,因此任何其他顺序都是可能的。 (也就是说,如果实现不首先执行->最后执行,但并不能保证,我会感到惊讶。)