Belgelerden: "Aşağıda açıklanan tüm rastgele sayı üreteçlerinin CopyConstructible ve Assignable olduğunu unutmayın. Bir jeneratörü kopyalamak veya atamak tüm dahili durumunu kopyalar, böylece orijinal ve kopya rasgele sayıların aynı dizisini oluşturur ." Böylece "rng" adını yeni değerden istifade ederek tekrar kullanabilirsiniz.
Yükseltme dağıtımını değiştirmek için kullanabileceğiniz hiçbir şey yok, ancak yeni nesneyi oluşturmanız gerekir. Bunun nedeni, dağılımın tür jeneratörünün türünü değiştiren farklı tipte olmasından kaynaklandığını düşünüyorum. Eğer dağıtım aralığını değiştirmek isterseniz
Ama aradığınız üzerinden erişebilirsiniz: Özel üyesine başvuru verir
distribution_type& distribution()
Bu çok anlamlı olarak yapar 1,58 source
göre Farklı dağıtım tipini kullanmak istiyorsanız, tutma tipi beyanı da farklı olacaktır.
#include <boost/random.hpp>
#include <iostream>
typedef boost::mt19937 base_gen_type;
typedef boost::uniform_int<int> dist_type;
typedef boost::variate_generator<base_gen_type &, dist_type> var_gen_type;
int main(){
unsigned seed = 1337;
int a = 0, b = 1;
base_gen_type base_gen(seed);
dist_type dist(a, b);
var_gen_type rng(base_gen, dist);
for(int i = 0; i < 10 ; i++) {
std::cout << rng() << " " << std::endl;
}
dist_type newdist(0,3);
rng.distribution() = newdist;
for(int i = 0; i < 10 ; i++) {
std::cout << rng() << " " << std::endl;
}
}
bu üretir:
0
1
0
0
0
1
0
0
0
0
2
2
1
1
3
1
2
1
0
3
Yani bu aralık için atanan dağılımını değiştirmek için bir yoldur.
o yüzden belki pointer tarafından saklanmaz gerçek türü böyle farklı dağılımlar ile jeneratör çağırarak yoluyladır kullanmak daha iyi bir yol değişen açısından
:
boost::random::mt19937 rng; // produces randomness out of thin air
// see pseudo-random number generators
boost::random::uniform_int_distribution<> six(1,6);
// distribution that maps to 1..6
// see random number distributions
int x = six(rng); // simulate rolling a die
son örneği rastgele baskının olduğu dokümantasyon here. Bu şekilde aynı jeneratörü farklı aralık dağılımlarına geçirebilirsiniz. Buna
dist_type newdist(0,3);
rng.distribution() = newdist;
:
nihai yolu sadece bu hatlar takas dağılımının tamamını değiştirmek ancak bunun için (dağıtım önceki değerlerine bağlıdır eğer yararlı olabilir) sadece parametreleri değiştirmek değildir:
rng.distribution().param(dist_type::param_type(0,3));
Yardım edin.