Использование Memento в генераторе псевдослучайных чисел
Я хотел бы спросить, как именно используется сувенир в генераторе псевдослучайных чисел? У меня есть высокий уровень знаний о генераторе псевдослучайных чисел, но я не вижу там никакого сувенира (даже я читал, что он там). Большое спасибо за ваш ответ:)
1 ответ
Я полагаю, вы говорите о сувенире по шаблону дизайна. Если так, то, на мой взгляд, память используется как внутреннее состояние генератора случайных чисел. Сначала вы создаете генератор случайных чисел с определенным начальным числом (то есть его состоянием), а затем используете это начальное число во время следующего поколения случайных чисел. Итак, используя стандартную терминологию сувенира:
- оригинатор - генератор случайных чисел,
- смотритель - это вызывающий абонент, который получает числа с помощью генератора случайных чисел,
- memento - это генератор случайных чисел, на основе которого создается следующее случайное значение
Стандартный rand() в C++ не поддерживает получение его состояния, поэтому единственная операция восстановления - просто сохранить начальное значение, которое вы устанавливаете, с помощью srand() в начале, а затем использовать его для восстановления генератора до исходного состояния.
Тем не менее, вы можете переопределить его, чтобы он поддерживал запросы состояния и затем последующее восстановление в любое, а не только начальное состояние. Чтобы узнать, как этого добиться, смотрите этот SO ответ. Также в том же потоке упоминается, что новые генераторы случайных чисел в C++11 по умолчанию предлагают эту функцию.