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. auchsin(),cos(),abs()...). Standardmässig werden sie aber in denstd-Namensraum eingegliedert.