任意整数的C++随机数(基本类型)

lem*_*mon 3 c++ random typedef

我有一个任意整数类型的typedef,例如

typedef unsigned long long myint;
Run Code Online (Sandbox Code Playgroud)

换句话说,我不知道它是如何定义的,但我可以保证它是一种基本类型.

我也有这种类型的变量实例

myint n;
Run Code Online (Sandbox Code Playgroud)

如何分配n可能是由支持的任何值的随机值myint


简单地缩放rand()覆盖范围的结果myint将不合适,因为myint可能会比int类型更大,因此将存在无法访问的数字.

像下面这样的东西可以工作,但似乎相当不优雅和低效:找到in myint和in中的位数int,然后连接一堆rand()数字直到myint填充.

int*_*jay 7

使用C++ 11 <random>库,uniform_int_distribution可以为您提供任何整数类型:

std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<myint> dis(
    std::numeric_limits<myint>::min(), 
    std::numeric_limits<myint>::max());

myint num = dis(gen);
Run Code Online (Sandbox Code Playgroud)

随着无符号类型,你可以使用默认的构造函数uniform_int_distribution,这给范围0numeric_limits<T>::max().