首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中如何在循环中生成不同的随机数?

在C++中如何在循环中生成不同的随机数?
EN

Stack Overflow用户
提问于 2011-02-08 05:10:18
回答 13查看 126.1K关注 0票数 21

是否有可能在每次循环运行时生成不同的随机数。例如,我有:

代码语言:javascript
复制
for (int t=0;t<10;t++)
{
    int random_x;
    srand ( time(NULL) );
    random_x = rand() % 100;
    cout<<"\nRandom X = "<<random_x;
} 

但问题是,它每次都会生成相同的随机数。是否有可能在每次循环运行时生成不同的随机数?

是否也有可能重置随机数初始化?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2011-02-08 05:13:39

不要在循环中使用srand,只使用一次,例如在main()的开头。而srand()正是你重置它的方式。

票数 28
EN

Stack Overflow用户

发布于 2011-02-08 05:13:20

您每次都会得到相同的随机数,因为您在循环中设置了一个种子。尽管您使用的是time(),但它每秒只更改一次,所以如果您的循环在一秒内完成(很可能会完成),您每次都会得到相同的种子值和相同的初始随机数。

srand()调用移到循环之外(并且只在应用程序开始时调用一次),您应该会得到随机的“随机”数字。

票数 17
EN

Stack Overflow用户

发布于 2015-04-15 19:12:56

Do not rand();使用新的C++11工具(如std::mt19937std::uniform_int_distribution,等)而不是。

您可以使用如下代码():

代码语言:javascript
复制
#include <iostream>
#include <random>
using namespace std;

int main()
{
    // Random seed
    random_device rd;

    // Initialize Mersenne Twister pseudo-random number generator
    mt19937 gen(rd());

    // Generate pseudo-random numbers
    // uniformly distributed in range (1, 100)
    uniform_int_distribution<> dis(1, 100);

    // Generate ten pseudo-random numbers
    for (int i = 0; i < 10; i++)
    {
        int randomX = dis(gen);
        cout << "\nRandom X = " << randomX;
    }
}

P.S.

有关rand()-related问题的更多详细信息,请考虑观看来自Going Native 2013大会的视频:

rand() Considered Harmful

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4926622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档