(五)boost庫之隨機數random

boost庫爲咱們提供了許多的平常隨機數生成器:ios

1.uniform_smallint:在小整數域內的均勻分佈
2.uniform_int:在整數域上的均勻分佈
3.uniform_01:在區間[0,1]上的實數連續均勻分佈
4.uniform_real:在區間[min,max]上的實數連續均勻分佈
5.bernoulli_distribution:伯努利分佈
6.binomial_distribution:二項分佈
7.cauchy_distribution:柯西(洛倫茲)分佈
8.gamma_distribution:伽馬分佈
9.poisson_distribution:泊松分佈
10.geometric_distribution:幾何分佈
11.triangle_distribution:三角分佈
12.exponential_distribution:指數分佈
13.normal_distribution:正態分佈
14.lognormal_distribution:對數正態分佈
15.uniform_on_sphere:球面均勻分佈dom

 

隨機數生成包括兩部分,一是隨機數種子,二是生成器,對於隨機數種子,使用boost::random::mt19937就夠用了spa

#include <iostream>
#include <boost/random.hpp>
#include <boost/random/random_device.hpp>
boost::random::mt19937 gen;
int _tmain(int argc, _TCHAR* argv[])
{
    {
        //整數
        boost::uniform_int<> real(1, 999);
        std::cout << real(gen) << std::endl;
    }
    
    {
        //實數
        boost::uniform_real<double> real(1, 5);
        std::cout << real(gen) << std::endl;
    }
    
    {
        //0-1上的實數
        boost::uniform_01<boost::mt19937&> u01(gen);
        //正態分佈,參數分別爲均值、方差
        boost::normal_distribution<> nd(0, 1);
        std::cout << nd(u01) << std::endl;
    }
    boost::random::uniform_int_distribution<> dist(1, 1000);
    std::cout << dist(gen) << std::endl;
    std::cout << dist(gen) << std::endl;
    std::string chars(
        "abcdefghijklmnopqrstuvwxyz"
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        "1234567890"
        "!@#$%^&*()"
        "`~-_=+[{]{\\|;:'\",<.>/? ");
    boost::random::random_device rng;
    boost::random::uniform_int_distribution<> index_dist(0, chars.size() - 1);
    for(int i = 0; i < 8; ++i) {
        std::cout << chars[index_dist(rng)];
    }
    return 0;
}
相關文章
相關標籤/搜索