Probleme mit variable-sized Array mit 0 vorinitialisieren



  • Hi,

    ich frage über cin einen Wert a ab, und erstelle danach ein Array der Größe axa. Nun würde ich aber gerne das array von Anfang an mit 0 vorinitialisieren.
    Ich hatte es jetzt so probiert:

    int array[a][a];
    

    , aber da sagt mir der Compiler:
    variable-sized object `array' may not be initialized

    Wie kann ich das umgehen?
    MfG, Ozzy



  • Hallo

    Der Fehler hat grundsätzlich erstmal nichts mit der Initialisierung des Arrays zu tun, sondern mit der reinen Definition. Offenbar ist die Variable a nicht const, und in C++ gibt muß noch jedes C-Array mit konstanten Größen arbeiten.
    Wenn du also a nicht konstant machen willst/kannst, must du entweder das Array mit new[] anlegen (und mit delete[] wieder löschen, oder du verwendest gleich ordentliche C++ Container wie std::vector.
    Das Initialisieren des C-Arrays (egal ob statisch oder dynamisch) ist über For-Schleifen oder die Funktion memset zu machen. Den std..vector kannst du mit entsprechenden Membermehtoden füllen

    Zu beiden Varianten gibt es hier jedenfalls schon dutzende Threads, und auch FAQ- und Magazin-Artikel.

    bis bald
    akari



  • Hi,

    kannst Du mir vielleicht auch sagen, wie ich einen Vektor der Größe axa anlege?
    Bei einer Dimension ist es mir ja noch klar:
    std::vector<int> feld(a);
    Aber bei 2, oder besser sogar 3 (x,x,2)

    MfG, Ozzy



  • //2-dimensional
    std::vector< std::vector<int> > matrix;
    

    3-dimensional sollte jetzt kein Problem mehr sein.

    Die gleiche Geschichte mit new und delete:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39489.html

    MfG

    GPC



  • Sorry, aber ich habe gerade voll die Denkblockade; vor allem, da ich bisher immer noch mit Array gearbeitet habe. Da ist das ja alles ganz einfach: eine a*a Matrix mit 3 Dimensionen:

    int matrix[a][a][3];
    

    Doch jetzt bekomme ich das bei den Vektoren ums verrecken nicht hin, da ich es mir noch einmal vorstellen kann, wie es aussieht (ich finde, das geht bei Matritzen so gut...)
    Mit 2 Dimensionen habe ich das denke ich so gut wie verstanden, obwohl ich es auch da nicht hinbekomme, dem inneren Vektor eine Dimension zu geben...

    Magst Du mir vielleicht noch ein letztes Mal helfen, wie man den oben geschriebenen Ausdruck in Vektoren umformt???

    MfG, und vielen Dank für Deine Hilfe, Ozzy



  • Hi,

    vector< vector< vector<int> > > matrix(a, a);
    

    das scheint ja schon einmal so etwas zu machen, aber nun bekomme ich die 3 für die 3-te Dimension da nicht mehr rein. Ist das überhaupt richtig so?

    MfG, Ozzy



  • vector<vector<int> > m(DIM1, vector<int>(DIM2));
    


  • So, nun habe ich es so gemacht:

    vector< vector< vector<int> > > matrix(3, (a, a));
    

    scheint auch zu funktionieren; aber Array's sind mir schon lieber.

    Kann mir denn jemand sagen, wie ich jetzt diesen Vektor mit 0 vorinitialisieren kann? Dann bin ich auch wunschlos glücklich...

    MfG, Ozzy



  • Ozzy schrieb:

    Kann mir denn jemand sagen, wie ich jetzt diesen Vektor mit 0 vorinitialisieren kann? Dann bin ich auch wunschlos glücklich...

    Dein vector ist mit 0 vorinitialisiert, ist bei vector Standard.



  • Hi,

    was ich da mit
    vector< vector< vector<int> > > matrix(3, (a, a));
    geschrieben habe, funtkioniert auf jeden Fall nicht!
    Könnt Ihr mir sagen, wie das richtig heißen muss?

    MfG, Ozzy



  • vector<vector<vector<int> > >matrix(DIM1, vector<vector<int> >(DIM2, DIM3));
    


  • Jo, vielen Dank, so funzt es!!!

    Aber noch eine letzte Frage: jetzt möchte ich diesen Vektor wieder in einem Vektor speichern (werden mehrere)
    Davon weiß ich gar keine Dimension, also werde ich die Vektoren auch nur pushen.
    Wie muss ich dann den letzen noch draußenrum packen?
    Reicht ein:

    vector<vector<vector<vector<int> > >>matritzen(DIM1, vector<vector<int> >(DIM2, DIM3));
    

    das aus???

    Und noch eine Frage: wenn ich dann diesen 3-D-Vektor aus dem Vektor herausgeolt habe, wie bestimme ich z.B. Size(DIM2)???

    MfG, Ozzy


Anmelden zum Antworten