Deklaration eines zweidimensionalen boolschen Array



  • (std::vector<bool>*)ships
    

    Was soll das * da?

    Aber worauf ich noch gar nicht eingegangen bin: vector<bool> hat leider nicht allzu viel mit vector<andererTyp> zu tun. Du könntest statt bool z. B. int verwenden, um den "normalen" vector zu verwenden.

    Ob du dann ships[x][y] oder ships.at(x).at(y) benutzt, unterscheidet sich nur in der zusätzlichen Überprüfung bei at, ob der Parameter nicht zu groß oder zu klein ist.



  • Ich habe das nicht so geschrieben

    void setShip(HANDLE set, vector<bool>& ships, int x, int y){
        ships[x][y]=true;
        setCursor (set, x, y), cout << 'S';
    

    Ich würde aber gerne weiterhin ein boolsches Array nutzen. Wenn das mit vector sinnlos ist, würde ich dann gerne wieder bool array[int][int] verwenden. Aber dann bleibt wieder das Problem mit der Übergabe in die Funktion.



  • Nicht vector<bool>, sondern vector<vector<bool> >.

    Du kannst vector<vector<bool> > benutzen. Ich weiß da zwar nicht das komplette Verhalten auswendig, aber für deine Zwecke reicht das. Ansonsten nimmst du halt einfach vector<deque<bool> >.



  • Ich habs jetzt nochmal ohne vector versucht und bekomme schon wieder einen Fehler. Ich werd noch irre!

    void editField(HANDLE set, bool** ships)
    
    [ ... ]
    
    bool ships[80][25];
    
    editField(set, ships); // |error: cannot convert 'bool (*)[25]' to 'bool**' for argument '2' to 'void editField(void*, bool**)'|
    

    Falls das irgendwann erledigt sein sollte, hätte ich noch die Frage, ob es eine Funktion gibt, die ein Array mit einem immer gleichen Wert füllt.



  • void editField(HANDLE set, bool (*ships)[25])//<<<<<<<<<<<<
    
    [ ... ]
    
    bool ships[80][25];
    
    editField(set, ships);
    

    😉
    memset(&array, wert, anzahl;)
    💡



  • Ah endlich keinen Fehler 🙂 Danke an Dich und Michael E. Auch für memset.

    Wobei ich

    bool (*ships)[25]
    

    von der Form her etwas unglücklich finde 😕



  • Nimm nicht memset() . Lieber std::fill() , das kann auch mit C++-Objekten (Nicht-PODs) sowie mit STL-Contiainern umgehen. Nicht dass du dir Dinge aneignest, die später nicht funktionieren.

    lemon03 schrieb:

    Wobei ich

    bool (*ships)[25]
    

    von der Form her etwas unglücklich finde 😕

    Das ist halt, wenn man mit rohen Arrays arbeitet. Da gibts etliche Sonderregeln und kaum irgendwo normale Wertsemantik. Willst du wie gewohnt arbeiten (und zusätzliche Features wie Debug-Unterstützung nutzen), nimm std::tr1::array . Dann kannst du eine normale Referenz nehmen.



  • Für fill() muss ich doch wieder vector nutzen? Da gabs doch die ganze Zeit Fehler. Und für tr1::array weiß ich mal wieder nicht, wie man das für ein mehrdimensionales Array nutzt.



  • Nein, std::fill() funktioniert auch mit Arrays.

    #include <algorithm>
    
    int main()
    {
        const int size = 5;
        int array[size];
        std::fill(array, array+size, 42);
    }
    


  • Ok danke, wieder etwas zu gelernt 😉


Anmelden zum Antworten