You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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类型,而非单独的上下限数值。

正确用法步骤

  1. 先构造param_type对象,将上下限作为参数传入;
  2. 把这个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:22:40