如何使用std::uniform_int_distribution的operator()(Generator& g, const param_type& params)方法
正确使用std::uniform_int_distribution的带param_type的operator()方法
你当前代码里的问题在于,直接把两个整数传给operator()是错误的——这个重载版本要求第二个参数是std::uniform_int_distribution::param_type类型,而非单独的上下限数值。
正确用法步骤
- 先构造
param_type对象,将上下限作为参数传入; - 把这个
param_type对象传递给operator()。
另外,你的代码还有个优化点:每次调用get_random_int都重新初始化随机生成器会降低随机性质量,应该把生成器也声明为static,让它只初始化一次。
修正后的完整代码
#include <iostream> #include <random> int get_random_int(const int lower_limit, const int upper_limit) { static std::random_device rd{}; static std::mt19937 gen{rd()}; static std::uniform_int_distribution<> dist; // 构造param_type对象并传入operator() auto params = std::uniform_int_distribution<>::param_type(lower_limit, upper_limit); return dist(gen, params); } int main() { std::cout << get_random_int(1, 1000000) << std::endl; }
也可以直接在调用时临时构造param_type,写法更简洁:
return dist(gen, std::uniform_int_distribution<>::param_type(lower_limit, upper_limit));
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

