pointer auf 2dimensionalen array?



  • wenn ich

    new int[128][128]; schreibe

    wie kann der pointer darauf zuweisen?

    ist das ungewöhnlich?


  • Administrator

    xBlackKnightx schrieb:

    wie kann der pointer darauf zuweisen?

    Wie meinen? Womöglich sowas?
    int (*p)[128] = new int[128][128];

    Keine Ahnung, was du mit dieser Frage fragen willst 😉

    xBlackKnightx schrieb:

    ist das ungewöhnlich?

    Mehrdimensionale Arrays sind immer ungewöhnlich, weil sie extrem unangenehm sind, um damit zu arbeiten. Meistens nimmt man ein 1D Array und simuliert über entsprechende Offsets die anderen Dimensionen. Dazu kann man sich dann auch Klassen bauen oder man verwendet bereits existierende aus der Standardbibliothek oder Boost.

    Grüssli



  • für jeden offset ein objekt der klasse? oder wie schaut das aus

    kann man arrays zur laufzeit vergrößern, ohne dass es kopiert wird?
    problem ist bei mir dass es negative und positive richtung gibt. d.h. es müsste auch nach hinten erweitern, wenn neue werte dazukommen.

    wie heisst die klasse von boost?


  • Administrator

    xBlackKnightx schrieb:

    für jeden offset ein objekt der klasse? oder wie schaut das aus

    Nein, einfach eine Klasse, welche die Offsets verwaltet und den Speicher intern in einem ein dimensionalen Array hält. Kommt allerdings oft auch ganz auf den Anwendungsfall drauf an.

    xBlackKnightx schrieb:

    kann man arrays zur laufzeit vergrößern, ohne dass es kopiert wird?

    Ein C Array nur über std::realloc . Allerdings ist es nicht garantiert, dass es funktioniert und wenn es nicht geht, dann wird das Array trotzdem kopiert. Zudem kann man es nur mit POD Typen verwenden. Grundsätzlich völlig unnötig, gibt da besser Alternativen in C++.

    xBlackKnightx schrieb:

    problem ist bei mir dass es negative und positive richtung gibt. d.h. es müsste auch nach hinten erweitern, wenn neue werte dazukommen.

    In zwei Richtungen erweitern: Deque.

    xBlackKnightx schrieb:

    wie heisst die klasse von boost?

    Für mehrdimensionale Arrays gibt es in Boost MultiArray.
    http://www.boost.org/doc/libs/1_39_0/libs/multi_array/doc/index.html

    Ist relativ komplex, um einzusteigen, aber wenn man einmal den Dreh raus hat, geht es sehr einfach und ist sehr angenehm.

    Grüssli



  • puh da bin ich ein wenig überfordert.

    Sind Container eigentlich eine Erweiterung von Arrays?

    Ich dachte an Container mit pointers die auf Containers mit Datentypen zuweisen. das wäre dann, was sowohl in Höhe als auch in Breite erweitert werden kann?

    in meinem Programm erweitern sich die Datentypen in einem array in etwa so:
    schritt 1:

    0 0 0 0 0 0 0 0 0 
    0 0 0 0 5 0 0 0 0 
    0 0 0 2 2 2 0 0 0 
    0 0 0 2 0 2 0 0 0 
    0 0 0 0 0 0 0 0 0
    

    schritt 2:

    0 0 0 0 0 0 0 0 0 
    0 0 0 2 5 2 0 0 0 
    0 0 2 2 10 2 2 0 0 
    0 0 0 2 0 2 0 0 0 
    0 0 0 0 0 0 0 0 0
    

    schritt 3:

    0 0 0 0 4 0 0 0 0 
    0 0 0 2 5 2 0 0 0 
    0 0 2 12 10 12 2 0 0 
    0 0 2 2 4 2 2 0 0 
    0 0 0 0 0 0 0 0 0
    

    schritt 4:

    0 0 0 2 4 2 0 0 0 
    0 0 4 2 25 2 4 0 0 
    0 0 2 12 10 12 2 0 0 
    0 2 2 16 4 16 2 2 0 
    0 0 0 0 0 0 0 0 0
    

    dass immer mehr Nullen dann durch x-Zahlen ersetzt werden und sich so ausweiten.

    mit hilfe von containers müssen dann die unnötigen nullen nicht gespeichert werden. wäre das sinnvoll? natürlich wird die fläche viel größer sein. vlt 128x128 ints fläche


Anmelden zum Antworten