std::rand
来自cppreference.com
| 定义于头文件 <cstdlib>
|
||
| int rand(); |
||
返回 0 与 RAND_MAX (包含 0 与 RAND_MAX )的随机数。
std::srand() 播种 rand() 所用的伪随机数生成器。若在任何到 srand() 的调用前使用 rand() ,则 rand() 表现如同它以 srand(1) 播种。
每次以 srand() 播种 rand() ,它必须在后续调用上产生相同的值数列。
标准库中的其他函数可调用 rand 。哪个函数这么做是实现定义的。
rand() 是否线程安全是实现定义的。
参数
(无)
返回值
0 与 RAND_MAX 间的随机整数值。
注解
不保证生成的随机数列质量。过去,一些 rand() 在随机性、分布和产生的序列周期上有严重缺陷(在一个众所周知的例子中,调用之间最低位简单地在 1 与 0 间切换)。
对于严肃的随机数生成需求不推荐 rand() 。推荐用 C++11 的随机数生成设施替换 rand() 。 (C++11 起)
示例
运行此代码
#include <cstdlib> #include <iostream> #include <ctime> int main() { std::srand(std::time(nullptr)); // 以当前时间为随机生成器的种子 int random_variable = std::rand(); std::cout << "Random value on [0 " << RAND_MAX << "]: " << random_variable << '\n'; // 扔 6 面色子 20 次 for (int n = 0; n != 20; ++n) { int x = 7; while(x > 6) x = 1 + std::rand() / ((RAND_MAX + 1u) / 6); // 注意: 1 + rand() % 6 有偏差! std::cout << x << ' '; } }
可能的输出:
Random value on [0 2147483647]: 726295113 6 3 6 2 6 5 6 3 1 1 1 6 6 6 4 1 3 6 4 2
参阅
| (C++11) |
产生在一个范围上均匀分布的整数值 (类模板) |
| 初始化伪随机数生成器 (函数) | |
| std::rand 生成的最大可能值 (宏常量) | |
| 生成指定范围中的随机整数 (函数模板) |