我正在尝试将种子设置为c ++ std :: default_random_engine:
#include<random>
#include<time.h>
#include<iostream>
using namespace std;
void print_rand();
int main() {
for (int i{0}; i < 20; ++i) {
print_rand();
}
return 0;
}
void print_rand() {
default_random_engine e;
e.seed(time(0));
cout << e() << endl;
}
似乎印刷的数字是相同的,我该如何设置种子以根据时间生成随机数?
答案 0 :(得分:3)
您只需要播种一次,而不是每次都调用该函数。然后,您将获得不同的值。我将功能移至main()
进行演示。
#include<random>
#include<time.h>
#include<iostream>
int main() {
std::default_random_engine e;
e.seed(time(0));
for (int i{0}; i < 20; ++i) {
std::cout << e() << std::endl;
}
return 0;
}
请参见Live Demo
答案 1 :(得分:2)
为@ P.W。说,你应该只播一次。在该方向上的最小变化是使用静态变量,并向构造函数提供种子:
#include<random>
#include<time.h>
#include<iostream>
void print_rand();
int main() {
for (int i{0}; i < 20; ++i) {
print_rand();
}
return 0;
}
void print_rand() {
static std::default_random_engine e(time(0));
cout << e() << endl;
}