Domainerror und vectorzufallszahlen



  • Halli Hallo liebe USer,

    ich hab eine Frage bzgl des Domain_errors ( try and catch ).
    Wozu braucht man das ? Wieso kann man nicht nur if und else Anweisungen verwenden ?
    KOennt Ihr mir auch bei diesen Code helfen ?
    Bei diesen Code versuche ich Zufallszahlen zu erzeugen, welches mir leider nicht gelingt und ich möchte das hierbei Reihen und Spalten gebildet werden, funktioniert leider auch nicht.
    Vielen lieben Dank für eure HIlfe 😃

    # include <iostream>
    # include <string>
    # include <stdlib.h>
    # include <vector>

    using namespace std;

    int main ()

    {
    vector<int>Zahl(16) ;
    int Zufall= rand ()%16;
    Zahl [Zufall]++;
    for (int i=0; i<16; i++)

    {
    Zahl.push_back(i);
    cout<< Zahl[Zufall];
    }
    cout<<endl;

    return 0 ;
    }



  • Die erste Frage ist mir zu Blöd.

    Aber wie kann man elegant einen vector mit Zufallszahlen füllen? Mit C++11 geht es cool:

    #include <algorithm>
    #include <iostream>
    #include <functional>
    #include <iterator>
    #include <random>
    
    int main()
    {
        std::default_random_engine generator;
    
        std::uniform_int_distribution<int> distribution(0, 15); /** in [0;15], oder? Wäre ja mit rand()%16 genauso gewesen.
                                                                    Hier gibst du einfach an, in welche Verteilungsform die vom Generator generierten Sequenzen gebracht werden - 
                                                                    hier eine möglichst gleichmäßige Verteilung (-> uniform distribution) über [0;15] */
    
        std::vector<int> vec(16); // Vector muss vorher entsprechend vergrößert werden.
    
        std::generate( vec.begin(), vec.end(), std::bind ( distribution, generator ) ); /// sexy, nicht wahr? Mit std::bind lassen wir ein Objekt generieren, dass
                                                                                        /// sich per operator() "aufrufen" lässt, und eine Zufällige Zahl zwischen 0 und 15 zurückgibt!
                                                                                        /// Dazu ruft es distribution(generator) auf.
    
        std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, ", "));
    }
    

    Und ich will SeppJ ja nicht nutzlos machen. Aber ich fühle mich (mal wieder) genötigt, auf Code-Tags zu verweisen. Bitte den Code mit [code="cpp"] und [/code] einschließen.

    ~Edit: Cool! Das ="cpp" verschwindet. Quotet mal meinen Post. Ist ja witzig.~



  • Dein Code ist übrigens nicht so schön, weil du vergisst mithilfe von srand zu seeden.
    Das ginge in etwa so.

    srand( time(0) ); // bzw. nullptr in C++11, aber in C++11 würde man sowieso meine Variante verwenden.
    


  • Sone schrieb:

    std::generate( vec.begin(), vec.end(), std::bind ( distribution, generator ) ); /// sexy, nicht wahr? Mit std::bind lassen wir ein Objekt generieren, dass
    

    Sehr sexy 😃 👍 🤡


Anmelden zum Antworten