Variieren Reihe von uniform_int_distribution
Also ich habe ein Random-Objekt:
typedef unsigned int uint32;
class Random {
public:
Random() = default;
Random(std::mt19937::result_type seed) : eng(seed) {}
private:
uint32 DrawNumber();
std::mt19937 eng{std::random_device{}()};
std::uniform_int_distribution<uint32> uniform_dist{0, UINT32_MAX};
};
uint32 Random::DrawNumber()
{
return uniform_dist(eng);
}
Was ist der beste Weg, den ich variieren kann (durch eine andere Funktion oder anderweitig), die der oberen Grenze von der distribution?
(auch bereit, eine Beratung auf anderen Stil-Fragen)
- Sie können nicht variieren die Grenzen des
distribution
nach dem ersten initialisieren Sie Sie. Wie Sie Vorgehen sollten, hängt stark auf, was Sie verwenden, Ihre zufälligen zahlen-und warum Sie Sie brauchen, um die Grenzen. - Das ist falsch; Sie können.
- Möglich, Duplikat der Benutzen Sie std::uniform_int_distribution und definieren deren Sortiment später (Vorwegnahme der Einwände: ja, das ist neuer und hat eine etwas tangential-Titel, aber IMO hat es mehr on-topic Antwort akzeptiert und in der Regel kommt der Punkt schneller)
- Auf die Gefahr, parteiisch zu sein, das 2 verschiedene Fragen im wesentlichen die gleichen akzeptierten Antworten - "eine Andere Möglichkeit wäre, eine Methode hinzufügen..." - Teil von der anderen Frage die Antwort ist die gleiche wie die akzeptierte Antwort hier. Diese Antwort beinhaltet auch die Nutzung, mit einem std::mt19937. Das sagte die
.param
Methode ist neu. Da diese Frage ist jetzt 5 Jahre alt, vielleicht die beste Vorgehensweise wäre, um markieren Sie die anderen als Duplikat und ändern Sie die akzeptierte Antwort hier? Alternativ lassen Sie einfach die Fragen so wie Sie ist 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verteilung von Objekten sind leicht. Einfach erstellen Sie eine neue distribution, wenn Sie brauchen eine Zufallszahl. Ich benutze diesen Ansatz in einer game-engine, und, nach benchmarking, es ist vergleichbar mit der guten alten
rand()
.Außerdem habe ich mich gefragt, wie unterschiedlich das Spektrum der Verteilung auf GoingNative 2013 live stream, und Stephen T. Lavavej, Mitglied des Standards committee vorgeschlagen, erstellen Sie einfach neue Distributionen, da sollte es nicht ein performance-Problem.
Hier ist, wie würde ich den code schreiben:
Können Sie einfach erstellen Sie eine
std::uniform_int_distribution<uint32>::param_type
und ändern Sie den Bereich mithilfe derparam()
Methode. Sie können reduzieren die Vorlage Lärm mitdecltype
:Ich mache die
DrawNumber
Funktionpublic
für mein Beispiel. Sie können einer überlastung, die eine Obere Schranke, und übergeben Sie dann einen neuenuniform_int_distribution::param_type
zuuniform_int_distribution::operator()
Den
param_type
konstruiert werden können, die mit den gleichen Argumenten wie die entsprechende Verteilung.Vom N3337, §26.5.1.6/9 [rand.req.dist]
wo
D
ist der Typ eine Zufallszahl distribution function-Objekt undP
ist der Typ mit dem Namen vonD
's verbundenparam_type