2015-07-12 13 views

Odpowiedz

9

Wystarczy przypisać nowego rozkładu do zmiennej:

std::uniform_int_distribution<int> distr(0, 10); 

distr = std::uniform_int_distribution<int>(5, 13); 

Albo utworzyć parametr, który (@awesomeyi odpowiedź wymagane tworzenie obiektów dystrybucyjnych, to nadal wymaga obiektu param_type tworzenie)

std::uniform_int_distribution<int> distr(0, 10); 

distr.param(std::uniform_int_distribution<int>::param_type(5, 13)); 

Dowód, że param_type zadziała (fo r @stefan):

P jest powiązanym parametrem param_type. Musi spełniać wymagania w zakresie: CopyConstructible, CopyAssignable i EqualityComparable. Posiada również konstruktorów, które mają te same argumenty tych samych typów jak konstruktorów D i ma funkcje składowe identyczne z pobierające parametrów-powrocie z D

http://en.cppreference.com/w/cpp/concept/RandomNumberDistribution

+0

Czy "parametr_parametru" gwarantuje, że konstruktor przyjmuje dwie wartości? Nie mogę znaleźć niczego na cppreference.com – stefan

+0

@ stefan, dla uniform_int_distribution? tak, możesz to zobaczyć, wykonując deklarację "param_type". – dreamzor

+0

Nie widzę żadnych wymagań dla konstruktorów param_typu w standardzie. Czy możesz wskazać mi to? Wszystko, co widzę, to, że 'typ_parametru' jest' typedef nieokreślonym parametrem param_type'. Sugerowałoby to, że nie ma gwarancji dla takiego konstruktora. – stefan

2

Można dzięki funkcji param() .

std::uniform_int_distribution<int> distr(0, 10); 
std::uniform_int_distribution<int>::param_type d2(2, 10); 
distr.param(d2); 
+1

tzn. Potrzebuję nowego obiektu i tak ... Jest smutno :( – vlad4378

+0

@ vlad4378 To chyba nie tak Nie zmieniasz ciągle zakresów, prawda? Jeśli rozmiar zakresu jest taki sam dla wszystkich, możesz po prostu dodać przesunięcie – stefan

+0

@ vlad4378 zobacz moją edycję – yizzlez

Powiązane problemy