Dynamisches Mehrdimensionales Array



  • volkard schrieb:

    Oh, Typen mit Bedeutung! Ob man da was draus machen kann?

    Hm, ich bin mir gerade nicht sicher ob das Sarkasmus ist 😃

    zirkelschluss schrieb:

    Oder auch einfach

    mein_haus.sitzplaetze[0][1][2] = 3;
    

    Ja nee, dann könnte man ja auch gleich vector<vector<vector<int>>> nehmen... Warum soll ein Sitzplatz was 3-dimensionales sein? Was ist dann mein_haus.sitzplaetze[0] oder mein_haus.sitzplaetze[0][0] ?



  • happystudent schrieb:

    Ich find die hier nicht überflüssig sondern notwendig um auszudrücken mit was man da eigentlich arbeitet.

    Wie würdest du dein vector<vector<vector<int>>> denn nennen?

    typedef int sitzplatz;
    typedef vector<sitzplatz> reihe;
    typedef vector<reihe> raum;
    typedef vector<raum> haus; // = vector<vector<vector<int>>>
    


  • oenone schrieb:

    typedef int sitzplatz;
    typedef vector<sitzplatz> reihe;
    typedef vector<reihe> raum;
    typedef vector<raum> haus; // = vector<vector<vector<int>>>
    

    Das ändert doch nichts am eigentlichen Problem. Du liest den Code der irgendwo deinen ge-typedef-ten vector<vector<vector<int>>> benutzt:

    std::cout << mein_haus[0][1][2] << '\n';
    

    und dann ist erstmal rätseln angesagt, was den die Zeile jetzt überhaupt bedeuten soll. Mal ganz davon abgesehen dass das auch nicht besser wird wenn du einen Raum um einen vector für Türen/Fenster/etc. erweitern willst.

    Dagegen so:

    std::cout << mein_haus.platz_in_raum(0, 1, 2) << '\n';
    std::cout << mein_haus.tuer_in_raum(0, 2) << '\n';
    std::cout << mein_haus.fenster_in_raum(0, 1, 3).blumenkasten(2) << '\n';
    

    und schon hat man kein Problem mehr.



  • happystudent schrieb:

    oenone schrieb:

    typedef int sitzplatz;
    typedef vector<sitzplatz> reihe;
    typedef vector<reihe> raum;
    typedef vector<raum> haus; // = vector<vector<vector<int>>>
    

    Das ändert doch nichts am eigentlichen Problem. Du liest den Code der irgendwo deinen ge-typedef-ten vector<vector<vector<int>>> benutzt:

    std::cout << mein_haus[0][1][2] << '\n';
    

    und dann ist erstmal rätseln angesagt, was den die Zeile jetzt überhaupt bedeuten soll. Mal ganz davon abgesehen dass das auch nicht besser wird wenn du einen Raum um einen vector für Türen/Fenster/etc. erweitern willst.

    Dagegen so:

    std::cout << mein_haus.platz_in_raum(0, 1, 2) << '\n';
    std::cout << mein_haus.tuer_in_raum(0, 2) << '\n';
    std::cout << mein_haus.fenster_in_raum(0, 1, 3).blumenkasten(2) << '\n';
    

    und schon hat man kein Problem mehr.

    Eigentlich sinds named parameters, die das Land braucht.

    x=berechneKegelvolumen(5,6);
    

    ist nunmal kacke. Und nicht anders sieht es in jeder x-beliebigen Lib aus.

    x=berechneKegelvolumen(hoehe:=5,radius:=6);//alles wird gut//freiwillig
    

    und dann

    std::cout << mein_haus[stockwerk:=0][sitzreihe:=1][2] << '\n';
    


  • volkard schrieb:

    Eigentlich sinds named parameters, die das Land braucht.

    Das wäre cool... Hab mal recherchiert und es gibt ja tasächlich schon ein Proposal dafür 👍


  • Mod

    Du kannst dir ja auch was schreiben, das Zugriff nur so zulaesst: mein_haus.raum(5).reihe(2).sitz(4)


  • Mod

    happystudent schrieb:

    volkard schrieb:

    Eigentlich sinds named parameters, die das Land braucht.

    Das wäre cool... Hab mal recherchiert und es gibt ja tasächlich schon ein Proposal dafür 👍

    Das ist IMO unsinniger Quatsch. Wird garantiert nie bei C++ reinkommen.



  • Arcoth schrieb:

    Das ist IMO unsinniger Quatsch. Wird garantiert nie bei C++ reinkommen.

    Vermutlich.
    Nur kommts leider auch nicht in die IDEs rein, daß man beim Funktionsaufruf die Namen lesen kann (,ohne für jedes einzelne Argument mit der Maus drüber fahren zu müssen).



  • Vielen Dank für eure Tipps,

    nach einigem hin und her habe ich die Lösung für mich gefunden.
    Ich drücke mich im Code allgemein aus.
    Zum Schluss habe ich alle Werte in diesem 3D Array = 1 gesetzt.

    int a***;
    int x;
    int y;
    int z;
    
    a = new int**[x];
    
    for(int i = 0; i < x i++) {
        a[i] = new int*[y];
    
        for(int j = 0; j < y; j++) {
    	a[i][j] = new int[z];
    
    	for(int k = 0; k < z; k++) 
    	    a[i][j][k] = true;
        }
    }
    

  • Mod

    Es sollte mich eigentlich nicht kuemmern, aber irgendwie tut's schon ein bisschen weh 😞



  • Ich bin wahrlich kein Profi, aber ich hab mich lange mit 2 und 3 Stern Zeigern abgekämpft. Hey, vergiss den Code. Das geht schon aber ist echt Müll. Das kapierst sowieso in 3 Wochen nicht mehr. Die besten Lösungen wurden schon genannt.


Anmelden zum Antworten