c++ - C++ 随机数生成器只生成 0 - C++ 11
问题描述
我正在尝试为 C++ 程序生成一个介于 0 和 2(含)之间的随机数:
#include <iostream>
#include <string>
#include <cstdlib>
#include <random>
using namespace std;
int generateRowMovement(){
//http://www.cplusplus.com/reference/random/uniform_int_distribution/
default_random_engine generator;
uniform_int_distribution<int> distribution(0,2);
int row = distribution(generator);
return row;
}
int main(){
int row = generateRowMovement();
cout << row << endl;
int row2 = generateRowMovement();
cout << row2 << endl;
int row3 = generateRowMovement();
cout << row3 << endl;
return 0;
}
所有 3 个结果是:
0
0
0
我已经测试了 30 分钟,它总是为零。我已尝试关注此链接和此SO 帖子(将链接发回),但他们的解决方案都无法解决此问题。如何生成 0、1 和 2?
解决方案
您发布的代码存在两个问题,使其无法按照您的预期工作。第一个generator
是从来没有给过种子,或者像网上通常显示的那样,a random_device
,即
random_device rd;
default_random_engine generator(rd());
第二个是每次调用函数时,都会创建一个新的随机引擎和一个新的分布。最好创建一个随机设备,仅将其提供给引擎一次,然后让您的函数根据这些值返回值。
#include <iostream>
#include <string>
#include <cstdlib>
#include <random>
using namespace std;
random_device rd;
default_random_engine generator(rd());
uniform_int_distribution<int> distribution(0,2);
int generateRowMovement(){
return distribution(generator);
}
int main(){
int row = generateRowMovement();
cout << row << endl;
int row2 = generateRowMovement();
cout << row2 << endl;
int row3 = generateRowMovement();
cout << row3 << endl;
return 0;
}
推荐阅读
- python-3.x - 为什么不将请求正文作为字典接收 - Django
- javascript - Paypal 将自定义变量传递给订阅按钮
- spring-boot - 负载测试kafka消费者
- javascript - 新的 Relic 许可证密钥验证
- arrays - 将指针与整数进行比较?
- android - 如何保存列表中每个打开的片段项的状态?
- javascript - 为什么递归不返回新对象?
- c++ - 为什么这个解决方案比另一个解决方案快?
- google-sheets - 尝试使用 IF 或 IFS 公式解决工作问题
- linux - linux`shuf`--random-source中提到的随机字节是什么?