您尋求一種在指定範圍[min, max]內均勻產生隨機數的方法。
rand 的缺陷
您目前使用 rand() 和模運算子的實作可能無法確保均勻分佈,因為它的行為取決於 RAND_MAX 和範圍本身。
C 11 和統一範圍產生
在C 11 中,std::uniform_int_distribution 提供了針對此需求量身定制的解決方案:
#includestd::uniform_int_distribution distr(min, max); std::random_device rand_dev; std::mt19937 generator(rand_dev()); int random_number = distr(generator);
Container洗牌
要洗牌容器,請使用 std::shuffle:
#include#include std::vector vec = {4, 8, 15, 16, 23, 42}; std::random_device random_dev; std::mt19937 generator(random_dev()); std::shuffle(vec.begin(), vec.end(), generator);
Boost.Random
如果使用C 11 編譯器不可行,考慮Boost.Random,它具有與C 11 對應項類似的介面。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3