![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
TutorialBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 30. Boost.Random
|
![]() | Note |
---|---|
Мы используем здесьглобальныйгенераторный объект. Это важно, потому что мы не хотим создавать новыйгенератор псевдослучайных чиселпри каждом вызове. |
Теперь мы можем определить функцию, которая имитирует обычную шестигранную смерть.
int roll_die() {boost::random::uniform_int_distribution<> dist(1, 6);
return dist(gen); }
<
| ||||
Распределение — это объект функции. Мы генерируем случайное число, звоня< |
Источник этого примера см.weighted_die.cpp.
#include <boost/random/mersenne_twister.hpp> #include <boost/random/discrete_distribution.hpp> boost::mt19937 gen;
На этот раз вместо справедливой смерти вероятность прокатки 1 равна 50% (!). Остальные пять лиц одинаково вероятны.
<discrete_distribution
>Здесь хорошо работает, позволяя нам придавать вес каждому из возможных результатов.
![]() | Tip |
---|---|
Если ваш компилятор поддерживает< |
double probabilities[] = { 0.5, 0.1, 0.1, 0.1, 0.1, 0.1 }; boost::random::discrete_distribution<> dist(probabilities);
Теперь определим функцию, которая имитирует перекатывание этой матрицы.
int roll_weighted_die() {return dist(gen) + 1; }
Источник этого примера см.password.cpp.
Этот пример демонстрирует генерацию случайного 8 символьного пароля.
#include <boost/random/random_device.hpp> #include <boost/random/uniform_int_distribution.hpp> int main() {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)]; } std::cout << std::endl; }
Сначала мы определим персонажей, которых позволим. Это в значительной степени просто персонажи на стандартной клавиатуре. | |
Мы используем< | |
Наконец, мы выбираем 8 случайных символов из строки и печатаем их на кут. |
Статья Tutorial раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 30. Boost.Random может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 30. Boost.Random ::
реклама |