Этот код адаптирован из руководства по повышению на http://www.boost.org/doc/libs/1_42_0/libs/random/index.html:
#include <iostream>
#include "boost/random.hpp"
#include "boost/generator_iterator.hpp"
using namespace std;
int main() {
typedef boost::mt19937 RNGType;
RNGType rng;
boost::uniform_int<> one_to_six( 1, 6 );
boost::variate_generator< RNGType, boost::uniform_int<> >
dice(rng, one_to_six);
for ( int i = 0; i < 6; i++ ) {
int n = dice();
cout << n << endl;
}
}
Чтобы объяснить биты:
mt19937
- генератор твёрдых частиц мерсенна, который генерирует необработанные случайные числа. Здесь используется typedef, так что вы можете легко изменить тип генератора случайных чисел.
rng
является экземпляром твистера.
one_to_six
является экземпляром дистрибутива . Здесь указываются числа, которые мы хотим сгенерировать, и распределение, за которым они следуют. Здесь мы хотим от 1 до 6, распределенных равномерно.
dice
- это то, что берет необработанные числа и распределение и создает для нас числа, которые мы на самом деле хотим.
dice()
- это вызов operator()
для объекта dice
, который получает следующее случайное число после распределения, имитирующее случайный шестисторонний бросок костей.
В нынешнем виде этот код производит одинаковую последовательность бросков кубиков каждый раз. Вы можете рандомизировать генератор в его конструкторе:
RNGType rng( time(0) );
или с помощью члена seed ().