Frage

Ich habe gelernt zu Programm in C # und haben begonnen zu lernen, C ++. Ich bin mit dem Visual Studio 2010 IDE. Ich versuche, Zufallszahl mit den Verteilungsklassen in <random> verfügbar zu generieren. Zum Beispiel versuchte ich dabei die folgende:

    #include <random>
std::normal_distribution<double> *normal = new normal_distribution<double>(0.0, 0.0);
std::knuth_b *engine = new knuth_b();
std::variate_generator<knuth_b, normal_distribution<double>> *rnd;  
rnd = new variate_generator<knuth_b, normal_distribution<double>>(engine, normal);

Die letzte Zeile gibt einen Compiler-Fehler: IntelliSense: keine Instanz von Konstruktor "std :: tr1 :: variate_generator <_Engine, _Distrib> :: variate_generator [mit _Engine = std :: tr1 :: knuth_b, _Distrib = std :: tr1 :: normal_distribution]" entspricht der Argumentliste

Meine Argumente aussehen ok für mich, was mache ich falsch? Wenn hier die variate_generator Klasse instanziiert wird, welche Methode haben Sie die nächste Zufallszahl h von .NET System.Random.Next () erhalten nennen?

War es hilfreich?

Lösung

Es gibt keinen variate_generator in C ++ 0x, aber std :: bind funktioniert genauso gut. Die folgenden kompiliert und läuft in GCC 4.5.2 und MSVC 2010 Express:

#include <random>
#include <functional>
#include <iostream>
int main()
{
    std::normal_distribution<> normal(10.0, 3.0); // mean 10, sigma 3
    std::random_device rd;
    std::mt19937 engine(rd()); // knuth_b fails in MSVC2010, but compiles in GCC
    std::function<double()> rnd = std::bind(normal, engine);

    std::cout << rnd() << '\n';
    std::cout << rnd() << '\n';
    std::cout << rnd() << '\n';
    std::cout << rnd() << '\n';
}

PS:. Avoid new, wenn Sie können

Andere Tipps

ALERT: Beachten Sie, dass die oben genannte Lösung eine Kopie des Motors bindet, nicht ein Hinweis auf den Motor. Wenn Sie also auch tun: std :: function RND2 = std :: bind (normal, Motor); dann die RND Objekt und die RND2 Objekt genau die gleiche Folge von Zufallszahlen produzieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top