dyn 2 dimensionales int array??



  • Frauke2k schrieb:

    Schau dir mal CArray, CPtrArray und CTypedPtrArray an, um eine Übersicht über die Möglichkeiten für ein dynamisches Array zu bekommen.
    http://msdn.microsoft.com

    Die MFC ist dafür wohl gänzlich ungeeignet.

    Schau dir lieber vector, list & Co an. bzw boost::shared_ptr für Pointer in einem Container.



  • Ähm, das wichtigtste Array, nämlich des, was zu C++ dazugehört und auf jedem System ohne Lib verfügbar ist, hast du vergessen. 🙄

    @Shade: grrrr, nächstes mal fress ich dich auf. 😉



  • ok sorry 🙂



  • ich würd das gern ohne Libs machen, für ein 1 dimensionales Array geht das ja leicht, aber 2 Dimensionen?

    typedef int *PFeld;
    PFeld p;
    int anzahl;

    cin<<n;
    p=new int[n]; //n Felder großes 1 Dimesionen Array
    //geht auch mit malloc...

    delete p[]; //und weg is es



  • SirLant schrieb:

    Schau mal in die FAQ 🙄

    z.B. hier



  • danke, das is genau,das was is gesucht habe:

    aber etwas versteh is nicht? [] Operator überladen? was soll das machen??

    class Simple2DimArr 
    { 
        private: 
            int* pArr; 
            int Rows, Cols; 
        public: 
            Simple2DimArr(int Zeilen, int Spalten) 
            { 
                Rows = Zeilen; 
                Cols = Spalten; 
                // 2-Dimensionales Array auf 1-Dimensionales abbilden 
                pArr = new int[Rows * Cols]; 
            } 
            int* operator[](int Zeile)//<-- wuste nicht das man den [] Operator überladen kann
    //kann mir das wer mal erklären
            { 
                // Array liegt "zeilenweise" im Speicher 
                return & pArr[Zeile * Cols]; 
            } 
            ~Simple2DimArr() 
            { 
                delete [] pArr; 
            } 
    }; 
    
    int main() 
    { 
        Simple2DimArr Arr(2,3); 
        Arr[0][0] = 42; 
    }
    

    Und noch so eine frage nebenbei, wie liegt ein 2D Array im speicher????ß



  • Hi!

    Ein 2D-Array liegt so im Speicher (Beispiel mit einem a[6][8] Array):
    a[0][0], a[0][1], ..., a[0][6], a[0][7], a[1][0], a[1][1], ...

    Du kannst also wie folgt umrechnen auf einen Index:
    a[xANZAHL_ELEMENTE_INDEX2+y];
    bei 2 Indizes:
    a[x][y];
    Bei dem oben also, wenn du auf das 2. Element im 1. Feld zugreifen willst:
    a[0
    8+1];
    entspricht:
    a[0][1];

    EDIT:
    Die größe von 2. Index lässt sich so ermitteln:

    sizeof(*a); // sollte 8 zurückgeben.
    

    Das könntest du einer Variablen übergeben und dann kannst du alles auf einen Index umrechnen.

    Code-Hacker



  • Du machst deinem Namen alle Ehre. 😉
    Ne, im Ernst: Was spricht denn gegen verschachtelte vectoren?



  • ich find vectorkoordinaten wie arr[5][3][2] eigentlich sehr übersichtlich, man kann sich das immer so schön 3 dimensional vorstellen...5 auf der x achse,3 auf der y Achse,2 auf der z Achse.



  • vector< vector< vector < int > > > vec;

    vec[3][2][1] = 5;

    ich dachte bis eben eigentlich, dass das gehen würde 🤡



  • SirLant schrieb:

    ich dachte bis eben eigentlich, dass das gehen würde 🤡

    Nur wenn du für jede Dimension ein resize() aufrufst :p


Anmelden zum Antworten