rand in C++ mit STL



  • Wie im Titel schon angedeutet, welche Variante sollte man
    verwenden unter C++ mit STL und ohne Boost.

    Lassen wir die C Variante mit C-Headern mit .h mal aussen vor.

    srand(time(NULL));
        ...
        rand()%4;
    

    oder

    std::srand(std::time(0));
         ...
         std::rand()%4;
    

    oder

    srand(time(0));
          ...
          random_shuffle(v.begin(), v.end());
    

    oder gibt es noch eine andere Variante, die man wählen sollte?

    Ist der ctime-Header erforderlich oder gibt es eine Möglichkeit
    ohne gleich alles selbst zu implementieren?

    Hab irgendwo gelesen das die gewählte Form auch von den Headern
    abhängig sein soll? Gilt das auch innerhalb des selben Compilers
    mit seinen mitausgelieferten Headern? Oder ist die Info falsch?

    Ich hoffe das ich in der Suche nix übersehen hab.

    MfG f.-th.



  • 1 und 2 laufen auf dasselbe hinaus. Die std::-Präfixe brauchst du nur, wenn du nicth using namespace std; schreibst.

    Bei Variante 3 ist mir nicht ganz klar, was das random_shuffle da shufflen soll. Es sieht auf jeden Fall böse aus. Zufallszahlen werden nicht zufälliger, indem man sie noch weiter manipuliert.



  • schau dir lieber die Zufallsgeneratoren aus std::tr1 an http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1452.html



  • Ich schreib zwar zum Gehirnjoging ein wenig C++, aber
    soweit wie std::tr1 werde ich mich in absehbarer Zeit
    erst mal nicht rein kien 😉

    @ michael bei den varianten 1. und 2. war es meinen
    Compilern bisher egal, Vorgabe Header ohne .h, ob
    da using namespace std
    eingefügt war oder nicht. Hab aber vielleicht nur
    nicht die Kombi gefunden wo das eine Rolle spielt.

    MfG f.-th.



  • Bei den C-Headern kann es sein, dass man die std -Namensraumbezeichner weglassen kann (z.B. auch sin() , cos() , abs() ...). Standardmässig werden sie aber in den std -Namensraum eingegliedert.


Anmelden zum Antworten