2015-07-12 13 views

risposta

9

Basta assegnare una nuova distribuzione alla variabile:

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

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

Oppure, creare un parametro per questo (la creazione di oggetti di distribuzione risposta necessaria @awesomeyi, questo richiede ancora oggetto param_type creazione)

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

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

Prova che param_type funzionerà (per r @stefan):

P è il parametro param_type associato. Deve soddisfare i requisiti CopyConstructible, CopyAssignable e EqualityComparable . Essa ha anche costruttori che portano gli stessi argomenti di dello stesso tipo di costruttori di D ed ha funzioni membro identiche alle getter su parametri ritorno di D

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

+0

È il 'param_type' garantito che un costruttore abbia due valori? Non riesco a trovare nulla su cppreference.com – stefan

+0

@stefan, per uniform_int_distribution? si, puoi vederlo seguendo la dichiarazione 'param_type'. – dreamzor

+0

Non vedo alcun requisito sui costruttori param_type nello standard. Puoi indicarmi? Tutto quello che posso vedere è che 'param_type' è un' typedef non specificato param_type'. Ciò suggerirebbe che non esiste alcuna garanzia per tale costruttore. – stefan

2

è possibile attraverso la funzione param() .

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

ie Ho bisogno di un nuovo oggetto comunque ... È triste :( – vlad4378

+0

@ vlad4378 Probabilmente non è così Non stai cambiando costantemente intervalli, vero? E se la dimensione dell'intervallo è la stessa per tutti, puoi semplicemente aggiungere un offset. – stefan

+0

@ vlad4378 leggi la mia modifica – yizzlez

Problemi correlati