C++ RNG(随机数生成)优化

标签 c++ random

首先,我想澄清一下,我是 C++ 的新手,我整理了一些代码来输出一组随机的 16 位数字。为此,我使用了在线教程和相对较高的批处理经验(这个想法来自一个运行速度非常慢的批处理文件,我想将两个批处理文件都迁移到 c++ 以比较它们的运行情况,因为有两个类似的项目,一个其中一个用于随机数生成,这是一个,另一个用于随机字符串生成)。由于我对 C++ 不是那么好,我想要一些帮助来优化代码,因为我觉得它可以用更少的行来完成 背景介绍完毕,我的代码如下

#include <iostream>
#include <cstdlib>
#include <ctime>

int main()
{
    std::srand(std::time(0));
    int random0 = 0;
    int random1 = 0;
    int random2 = 0;
    int random3 = 0;
    int random4 = 0;
    int random5 = 0;
    int random6 = 0;
    int random7 = 0;
    int random8 = 0;
    int random9 = 0;
    int random10 = 0;
    int random11 = 0;
    int random12 = 0;
    int random13 = 0;
    int random14 = 0;
    int random15 = 0;


    for (int i = 0; i < i+1; ++i)
    {
        random0 = std::rand() % 9;
        random1 = std::rand() % 9;
        random2 = std::rand() % 9;
        random3 = std::rand() % 9;
        random4 = std::rand() % 9;
        random5 = std::rand() % 9;
        random6 = std::rand() % 9;
        random7 = std::rand() % 9;
        random8 = std::rand() % 9;
        random9 = std::rand() % 9;
        random10 = std::rand() % 9;
        random11 = std::rand() % 9;
        random12 = std::rand() % 9;
        random13 = std::rand() % 9;
        random14 = std::rand() % 9;
        random15 = std::rand() % 9;

        std::cout << random0 << random1 << random2 << random3 << random4 << random5 << random6 << random7 << random8 << random9 << random10 << random11 << random12 << random13 << random14 << random15 << std::endl;
    }
    return 0;
}

在此先感谢您的帮助,如果我触发了任何有经验的 c++ 编码员的强制症,我深表歉意。

最佳答案

and I've put together some code that outputs a random set of 16 digits.

我将其解读为在 0 之间打印一个随机数和 999999999999999 . 我用计算器将所有 9 转换为 23 86F2 6FC0 FFFF大于 32 位但小于 64 位,所以我们可以使用 uint64_t

生成随机数可以用 std::uniform_int_distribution<uint64_t> 来完成,将生成的数字打印为 16 位数字是 std::setw 的任务和 std::setfill

#include <random>
#include <iostream>
#include <iomanip>

int main()
{
    std::random_device rd;  
    std::mt19937 gen(rd()); 
    uint64_t maxlim = 9999999999999999 ;
    std::uniform_int_distribution<uint64_t> dis(0, maxlim);
    std::cout << std::setfill('0') << std::setw(16) << dis(gen) << std::endl;
}

这仅对 C++11 及更高版本有效

关于C++ RNG(随机数生成)优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58583070/

相关文章:

c++ - 长时间保持线程锁定

C++, 'operator=' 不匹配...错误

javascript - Windows 应用商店蓝牙

php - Mysql 两张表,从一张表中选取所有值,比较是否存在,然后返回一个随机值

javascript - 根据对象属性的值随机选择对象属性(抽奖)?

c++ - 为什么 stdlib 中的 rand 不遵循大数定律?

c++ - 如何使用此特定容器在 C++ 中创建二维数组

c++ - 动态创建指针数组时,Visual Studio 不显示完整数组

特定比例的随机分割文件

multithreading - 用于蒙特卡洛集成的线程安全随机数生成