测量时间以在 c++ 中生成更好的随机数
Measuring time to generate better random numbers in c++
我正在自学编程,作为一个挑战,我尝试用c ++制作一个简单的文本战斗系统。我使用函数 rand(( 生成伪随机数。问题是,每次运行程序时它们都是一样的。例如,如果 num1 在第一回合 1,在第二个 0 上,然后是 0、1、0、1、1、1、1 等,如果您关闭程序并重新打开它,它将始终是 1、0、0、1、0、1、1、1... 然后我查找了如何测量时间。我想取一个整数来准确表达玩家输入某个字符串所花费的时间。我完全遵循了教程(除了我以不同的方式命名变量(。它没有用。任何人都可以帮助我并解释一下它的语法是如何工作的吗?我把一个简单的程序放在一起,准确地代表我所做的,这样你就不必经历整个战斗系统的冗长、无关的代码。我查找了这样的问题,但没有任何效果。
#include <iostream>
#include <chrono>
using namespace std;
int main()
{
auto time1 = std::chrono::high_resolution_clock::now();
cout << "enter a character:" << endl;
char blob;
cin >> blob;
auto time2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> time = timer2 - timer1;
cout << time;
return 0;
}
如果你不想使用 rand(( 函数,你需要首先用 "seed" 调用 srand。 这是一个例子:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main () {
int i, n;
time_t t;
n = 5;
/* Intializes random number generator */
srand((unsigned) time(&t));
/* Print 5 random numbers from 0 to 50 */
for( i = 0 ; i < n ; i++ ) {
printf("%dn", rand() % 50);
}
return(0);
}
但就像人们在评论中写的那样是 C 样式代码而不是 CPP 这是与 CPP 一起使用的
#include <random>
#include <iostream>
int main()
{
std::random_device dev;
std::mt19937 rng(dev());
std::uniform_int_distribution<std::mt19937::result_type> dist6(1,6); // distribution in range [1, 6]
std::cout << dist6(rng) << std::endl;
}
如何在C++中生成随机数?
由于 3 个原因,您的代码无法按预期工作:
- 变量名中的拼写错误:将
timer1
和timer2
分别更改为time1
和time2
。 - 使用
duration_cast
而不是duration
。 - 使用
count()
方法。
count()
返回调用的类型的刻度数 它。
这是完成的代码:
#include <iostream>
#include <chrono>
using namespace std;
int main()
{
// meausure time at the begining.
auto time1 = chrono::high_resolution_clock::now();
cout << "enter a character:" << endl;
char blob;
// wait for user input.
cin >> blob;
// meausure time at the ending.
auto time2 = chrono::high_resolution_clock::now();
// evaluate and print the difference.
auto time = chrono::duration_cast<chrono::milliseconds>(time2 - time1);
cout << time.count();
return 0;
}
但是,正如@yaodav所建议的,还有其他更好的方法来生成C++中的随机数。
相关文章:
- C++:将控制台输出存储在宏中更好吗
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 初始化具有非默认构造函数的std::数组项的更好方法
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么新的随机库比std::rand()更好
- 寻找一种更好的方法来表示无符号字符数组
- 哪种方法更好,性能明智
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 寻求更好地理解标准::访问
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 如何更好地检查两个 char 变量是否在一组值中?
- 有没有更好的方法对C++中的三个整数进行排序?
- 什么模板用法在阶乘中更好
- 平面缓冲区可以利用向量中的 0 吗?还是其他小波比哈尔变换更好?
- 我们应该如何使用枚举类进行索引(或者我们应该更好地避免这种情况)?
- Protobuf中重复字段的问题.使用重复字段进行序列化/反序列化的更好方法是什么?
- 测量时间以在 c++ 中生成更好的随机数
- 使用来自更好的随机源的随机数播种伪随机生成器