我正在创建一个2维数组,其随机数为[0,9] 它可以工作,但是第二次执行完矩阵后 更改。为什么?
每次执行代码时,我都需要一个新的随机矩阵,而不是旧的运行时矩阵。问题出在哪里,我该如何解决?
#include <QCoreApplication>
#include <iostream>
#include <random>
constexpr int dim_rows = 3;
constexpr int dim_cols = 5;
template <size_t dim_rows, size_t dim_cols>
void print_2d_array(int (&outputArray)[dim_rows][dim_cols]){
std::cout << __func__ << std::endl;
for (size_t i = 0; i < dim_rows; i++){
std::cout << i << ": ";
for(size_t j = 0; j < dim_cols; j++) {
std::cout << outputArray[i][j] << " ";
}std::cout << std::endl;
}
}
int main(int argc, char *argv[])
{
std::default_random_engine generator;
std::uniform_int_distribution <int> distribution(0,9);
int twoDimA[dim_rows][dim_cols] = {{}};
for(int i = 1; i < dim_rows; i++) {
for(int j = 1; j < dim_cols; j++) {
twoDimA[i][j] = distribution(generator);
}
}
print_2d_array(twoDimA);
}
答案 0 :(得分:3)
答案 1 :(得分:0)
您将要使用seed()
函数将随机数生成器随机化。通常,对于这样的事情,只需一个时间戳就足够了。您只想确保每次运行的种子值都不同。
或熔岩灯。您可以用一堆熔岩灯播种。 Google“随机数熔岩灯”。 ;)
答案 2 :(得分:0)
正如其他人所说,您每次需要为引擎generator.seed(n)
注入不同的编号。默认情况下,它每次都使用相同的种子,这就是为什么您获得相同结果的原因。
数字生成器不是真正的“随机”,而是“ pseudorandom”。这意味着给定相同的种子,后续调用生成的数字序列将完全相同。但是,如果您每次都提供不同的种子(即使种子靠得很近),则对于大多数目的 all 来说,它是足够随机的。
人们通常选择当前的时钟时间作为种子,或者选择std :: random_device作为建议的对象,或者选择一些变化的值。在“真实”随机性很重要的领域(例如计算机安全性)中,有时他们甚至会做一些事情,例如为熔岩灯拍照;)