C++ 中是否存在等价的 - 对于给定的种子,随机数的顺序将始终相同

use*_*265 0 c++ java random

如果我在 Java 中有以下内容...我想让用户指定随机数生成器的种子,因此对于给定的种子,随机数的顺序始终相同...最终会输入要生成的种子每次都是相同的字母图案..

        Random rand = new Random(Long.parseLong(t[0])); 

       char r = (char)(rand.nextInt(26) + 'A');
        
What would be the equvalent to do the same for random in C++

cin >> seed;
srand(seed);
 char('A' + rand() % 26)
Run Code Online (Sandbox Code Playgroud)

srand(seed) 在 C++ 中工作吗...我已经看到响应是或否...

eer*_*ika 6

C++ 中是否存在等价的 - 对于给定的种子,随机数的顺序将始终相同

是的。这种行为是所有伪随机数生成器所固有的。

C++标准库中有伪随机数API<random>头文件中有伪随机数API。还有旧的 C PRNG API,但我建议不要将它用于任何需要良好质量随机性的事情。


但有一个警告。只要 PRNG 算法保持不变,序列就会相同。旧的 C API 的算法没有准确指定,因此序列可以并且确实在不同的标准库和/或语言实现中有所不同。这个问题也适用于 Java 虚拟机的不同实现。

API的生成器引擎<random>是精确指定的,因此在不同的实现中都是确定性的,除了它std::default_random_engine可以而且确实在不同的实现中有所不同。不幸的是,标准 API 的分布(均匀分布、正态分布等)并未准确指定,因此使用它们会在标准库实现之间引入潜在的差异。