数组[x];,c++,random,C++,Random" /> 数组[x];,c++,random,C++,Random" />

随机数发生器c++; 我对C++很陌生,我正试图让一个随机数发生器工作。总体思路是for循环每次调用随机生成器,并将随机数放入数组中。它基本上是有效的,唯一的问题是这个数字不是随机的。每次它打印出-84215051,这是一个问题 int main() { int *array; int size; cout << "Enter size of array: "; cin >> size; array = new int[size]; for (int x = 0; x < size; x++) { srand ( time(NULL) ); int randomNumber; randomNumber = rand() % 10000 + 1; randomNumber >> array[x]; intmain() { int*数组; 整数大小; 大小; 数组=新整数[大小]; 用于(int x=0;x>数组[x];

随机数发生器c++; 我对C++很陌生,我正试图让一个随机数发生器工作。总体思路是for循环每次调用随机生成器,并将随机数放入数组中。它基本上是有效的,唯一的问题是这个数字不是随机的。每次它打印出-84215051,这是一个问题 int main() { int *array; int size; cout << "Enter size of array: "; cin >> size; array = new int[size]; for (int x = 0; x < size; x++) { srand ( time(NULL) ); int randomNumber; randomNumber = rand() % 10000 + 1; randomNumber >> array[x]; intmain() { int*数组; 整数大小; 大小; 数组=新整数[大小]; 用于(int x=0;x>数组[x];,c++,random,C++,Random,这都是一个更大的排序算法的一部分,所以我不会麻烦复制整个算法,因为这是问题所在。在循环之前调用srand。它根据当前时间初始化生成器-如果循环足够快,你将在每次迭代中使用相同的种子初始化它,因此没有真正的随机性。一个ini简单化就足够了 @ThomasPadron McCarthy在对您的问题的评论中指出的另一个问题是:您正试图使用 randomNumber >> array[x]; 如果没有重载该运算符,则是一个移位操作,它将改变随机数,但不会将其存储到数组中。使用此操作存储它:

这都是一个更大的排序算法的一部分,所以我不会麻烦复制整个算法,因为这是问题所在。

在循环之前调用
srand
。它根据当前时间初始化生成器-如果循环足够快,你将在每次迭代中使用相同的种子初始化它,因此没有真正的随机性。一个ini简单化就足够了

@ThomasPadron McCarthy在对您的问题的评论中指出的另一个问题是:您正试图使用

randomNumber >> array[x];
如果没有重载该运算符,则是一个移位操作,它将改变随机数,但不会将其存储到数组中。使用此操作存储它:

array[x] = randomNumber;

如果可以的话,您应该使用C++11的
。这一点都不难,而且比
srand()
等都要快

#include <random>

...

std::mt19937 rng_engine(seed);
std::uniform_int_distribution<int> dist(min, max);
array[x] = dist(rng_engine);

关于随机数引擎的注意事项:如果您在代码的其他地方生成了更多的随机数,请尝试使用单个引擎对象(您可以创建多个发行版,即使是针对不同类型的发行版)<代码> STD::MT1937 存储624个32位整数来保持状态;大约2.5 KIB内存。

< P>因为使用C++为什么不使用C++方式?< /P> 以下是一些示例代码(您可以将其添加到您的应用程序中):

#包括
int main()
{
//Mersenne捻线器伪随机发生器:
类型定义标准:mt19937 CppRNG;
//为发电机设定种子:
uint32\u t seed\u val=0;
CppRNG随机发生器;
随机发生器。种子(种子值);
int min=1;//使用val
int max=50;//使用您的val
标准:均匀分布均匀最大值(最小值、最大值);
int r1=uniformMinMax(随机生成器);
int r2=uniformMinMax(随机生成器);
//……等等
返回0;
}

您的代码中有几个问题。一个是在每次迭代中调用的srand,正如fpw所解释的。但是您认为这一行有什么作用呢

randomNumber >> array[x];

如果您希望它将randomNumber复制到数组中的某个位置,则它不会这样做。相反,它会移动一些位,并丢弃结果。因此,当您以后打印数组的内容时,它们将是未初始化的垃圾。

请阅读您使用的所有函数的手册。您使用的代码中没有数字的打印输出我已经演示了。这可能也有问题,不仅仅是srand,因为此代码在两次运行之间会给出不同的结果,即使每次运行中生成的数字相同,并且在预期范围内。请给出一个显示问题的最小工作示例。@fpw:No,
main的参数列表为空很好。等等——randomNumber>>数组[x]应该做什么?在这里插入每日响应。我想“每一次”的意思是“当我打印它时,在数组的每个地方”。
#include <random>

int main()
{
    // A Mersenne Twister pseudo-random generator:
    typedef std::mt19937 CppRNG;

    // Seed the generator:
    uint32_t seed_val = 0;
    CppRNG RandomGenerator;
    RandomGenerator.seed(seed_val);

    int min = 1; // use your val
    int max = 50; // use your val

    std::uniform_int_distribution<uint32_t> uniformMinMax(min, max);

    int r1 = uniformMinMax(RandomGenerator);
    int r2 = uniformMinMax(RandomGenerator);

 //... and so on

return 0;
}
randomNumber >> array[x];