Besserer Weg um Vector zu füllen?



  • Guten Abend,
    ich habe grad vor ein kleines Spiel zu schreiben das ein Spielautomaten simulieren soll.
    Am Anfang des Spiels soll der Automat folgendes anzeigen:

    A A A //erste Zeile
    A A A //zweite Zeile
    A A A //dritte Zeile

    Und dann soll, wenn Start gedrückt wird, neue Buchstaben generiert werden.
    Um mit den Buchstaben und den Zeilen zu arbeiten, dachte ich mir, erstelle ich 3 Vector und fülle diese im Konstruktor mit jeweils 3 "A"'s.
    Hier bisher die Klasse:

    class slotmashine
    {
        private:
            std::vector<std::string> firstrow; //erste Zeile
            std::vector<std::string> secondrow; //zweite Zeile
            std::vector<std::string> thirdrow; //dritte Zeile
        public:
            slotmashine(); //Konstruktor um Vector zu füllen
    };
    

    Der Konstruktor sieht dann so aus :

    slotmashine::slotmashine()
    {
        for(int i = 0; i < 3; i++)
        {
            firstrow.push_back("A");
        }
        for(int i = 0; i < 3; i++)
        {
            secondrow.push_back("A");
        }
        for(int i = 0; i < 3; i++)
        {
            thirdrow.push_back("A");
        }
    }
    

    Meine Frage nun : Ist das die beste Möglichkeit die 3 Vector zu füllen, oder gäbe es eine einfache, leichtere und schnellere Variante. Oder soll ich ein 2 Dimensionales Array nehmen und es so füllen :

    std::string Zeilen = { 
                           { A, A, A }
                           { A, A, A }
                           { A, A, A }
                         }
    

    Ich glaube aber, dass ich später es etwas schwieriger hätte bei dem Generieren der Buchstaben, zumindest es schwerer hätte, als wenn ich mit einem Vector arbeite.

    Mit freundlichen Grüßen : FreakY



  • Kommt drauf an, wie du ihn am Anfang haben möchtest.
    Wenn es nur A's sein sollen:

    std::vector<std::vector<char>> v ( 3 , std::vector<char> (3,'A')); //Braucht es wirklich einen string?
    

    Dann hast du auch gleich nur noch eine vector von vecotren mit char's.

    class slotmashine
    {
        private:
            std::vector<std::vector<char>> v;
        public:
            slotmashine(); //Konstruktor um Vector zu füllen
    }; 
    ...
    slotmashine::slotmashine()
    :
    v ( 3 , std::vector<char> (3,'A'));
    {
    }
    


  • Ok danke schön, sieht gut und vernünftig aus.



  • drakon schrieb:

    Kommt drauf an, wie du ihn am Anfang haben möchtest.
    Wenn es nur A's sein sollen:

    std::vector<std::vector<char>> v ( 3 , std::vector<char> (3,'A')); //Braucht es wirklich einen string?
    

    Dann hast du auch gleich nur noch eine vector von vecotren mit char's.

    class slotmashine
    {
        private:
            std::vector<std::vector<char>> v;
        public:
            slotmashine(); //Konstruktor um Vector zu füllen
    }; 
    ...
    slotmashine::slotmashine()
    :
    v ( 3 , std::vector<char> (3,'A'));
    {
    }
    

    Denk dran das dir der Compiler hier:

    std::vector<std::vector<char>> v;
    

    einen Fehler schmeißt, weil er die >> als Streamoperator behandeln will oder als Rechtsshift.



  • Firefighter schrieb:

    Denk dran das dir der Compiler hier:

    std::vector<std::vector<char>> v;
    

    einen Fehler schmeißt, weil er die >> als Streamoperator behandeln will oder als Rechtsshift.

    VC macht das schon ein Weilchen nicht mehr.

    Obwohl, wie ich gerade festgestllt habe er sich hier überhaupt nicht standardkonform verhält.

    Y<X<6>> 1> >
    

    Das hier ergibt bei VC++08 einen Fehler, obwohl das explizit erlaubt sein sollte.



  • Ach wirklich? Gut wenn das VC nicht interessiert, Code::Blocks regt sich da noch gewaltig auf

    >>' should be> >' within a nested template argument list|

    Daher hatte ich das berichtigt.



  • Firefighter schrieb:

    Ach wirklich? Gut wenn das VC nicht interessiert, Code::Blocks regt sich da noch gewaltig auf

    >>' should be> >' within a nested template argument list|

    Daher hatte ich das berichtigt.

    Das Problem kannte ich schon, nur habe ich bis dato gedacht, dass der Abstand ein syntaktisches Workaround ist und nicht, dass es per Standard vorgegeben ist, dass da ein Abstand rein muss.


Anmelden zum Antworten