Hilfe bei dynamischen Aray (zweidimensional)



  • könntest du mir ein mal zeigen wie du das meinst?
    std::vector kenne ich gar nicht 😕



  • int m,n;
    cin>>m>>n;
    int Matrix[m][n];
    

    Wenn du jetzt noch den Einzelnden Varıablen einen Wert übergeben willst.

    for(int i=0;i<m;i++)
    {
    for(int j=0;j<n;j++)
    {
    cin>>Matrix[m][n];
    }
    }
    

    Ich hoffe ich konnte dir helfen 👍



  • Cho++ schrieb:

    int m,n;
    cin>>m>>n;
    int Matrix[m][n];
    

    Wenn du jetzt noch den Einzelnden Varıablen einen Wert übergeben willst.

    for(int i=0;i<m;i++)
    {
    for(int j=0;j<n;j++)
    {
    cin>>Matrix[m][n];
    }
    }
    

    Ich hoffe ich konnte dir helfen 👍

    bei deinem Beispiel gibt es eine Fehlermeldung beim kompelieren. m und n müssen konstanten sein. aber da die Größe wärend der Laufzeit sich ändern soll, kann ich keine Konstanten nutzen. Deswegen das mit den Zeigern.

    Klappt ja eins a mit einem Vektor^^



  • Agredo schrieb:

    In der Suche bin ich auf folgende Lösung gestoßen: http://www.c-plusplus.net/forum/39489-full

    Aso das hab ich mir garnicht angeschaut sry 😉



  • Cho++ schrieb:

    for(int i=0;i<m;i++)
    {
    for(int j=0;j<n;j++)
    {
    cin>>Matrix[m][n];
    }
    }
    

    ich denke, du meintest

    for(int i=0; i<m; ++i)
        for(int j=0; j<n; ++j)
            cin>>Matrix[i][j];
    

    oder? 😉

    PS.: immer Preinkrement benutzen, außer pPostinkrement wird benötigt.



  • Cyres schrieb:

    PS.: immer Preinkrement benutzen, außer pPostinkrement wird benötigt.

    Na erstens heißt es Präfix-Inkrement :D, zweitens: Bitte nicht schon wieder diese Diskussion... der Compiler wird das im Schlaf optimieren, deswegen ist das bei einigen Iteratoren und allen Skalaren Geschmackssache.



  • Sone schrieb:

    Na erstens heißt es Präfix-Inkrement 😃

    🤡 Es gibt auch Leute, die zwischendurch mal Englisch schreiben.



  • Wenn du jetzt noch den Einzelnden Varıablen einen Wert übergeben willst.

    Er meinte dynamisch, mal ganz davon abgesehen, dass nur einige Compiler deine Lösung akzeptieren.

    So, und um hier nochmal eine produktivere Variante zu bringen (was ja auch nicht ganz stimmt, wie schon gesagt: std::vector<std::vector<int> > wäre die richte Lösung):

    unsigned m(0), n(0);
    
        cin >> m >> n;
    
        int** mat = new int*[m];
    
        for (unsigned i(0); i<m; ++i)
            mat[i] = new int[n];
    
        for (unsigned i(0); i<m; ++i)
            for (unsigned j(0); j<n; ++j)
                mat[i][j] = i+j; //mit Werten belegen
        for (unsigned i(0), count(0); i<m; ++i)
            for (unsigned j(0); j<n; ++j, ++count)
                cout << count << ". Wert: " << mat[i][j] << "\n"; //Ausgabe, count zählt die Anzahl der Plätze, es sollte von 0bis(m*n-1) durchnummeriert sein.
    

    Edit: bin mir grad nicht ganz sicher, ob der Zugriff über mat[i][j] nicht doch Mist ist
    Edit2: oh und deleten musst du dann selbst, wenn du meine Lösung benutzt. Wenn du keine Ahnung hast wie das geht -> gar kein new benutzen.



  • Danke für eure Hilfen:)

    Das mir dem delete kann ich;)

    Aber wenn es per vector besser wäre, wie wäre da der Syntax und vielleicht ein Beispiel. Habe es noch nie benutzt. Kann gerade nichts von euren Vorschlägen testen, da ich noch auf der Arbeit bin.

    Dennoch Danke für die Unterstützung:)



  • Agredo schrieb:

    Hallo Community,
    ich hoffe ihr könnt mir bei einem Anfängerproblem helfen.
    Ich möchte eine mehrdimensionale dynamische Matrix mit einem Array (Matrix[m][n]) erstellen, wobei m und n durch eine Eingabe erstellt werden.

    In der Suche bin ich auf folgende Lösung gestoßen: http://www.c-plusplus.net/forum/39489-full die mir aber nicht ganz eschließt.
    Eindimensional habe ich es hinbekommen.

    Schau stattdessen mal hier:
    http://www.c-plusplus.net/forum/298454-full



  • Ich bin Matrix... schrieb:

    Wenn du jetzt noch den Einzelnden Varıablen einen Wert übergeben willst.

    Er meinte dynamisch, mal ganz davon abgesehen, dass nur einige Compiler deine Lösung akzeptieren.

    So, und um hier nochmal eine produktivere Variante zu bringen (was ja auch nicht ganz stimmt, wie schon gesagt: std::vector<std::vector<int> > wäre die richte Lösung):

    unsigned m(0), n(0);
    
        cin >> m >> n;
    
        int** mat = new int*[m];
    
        for (unsigned i(0); i<m; ++i)
            mat[i] = new int[n];
    
        for (unsigned i(0); i<m; ++i)
            for (unsigned j(0); j<n; ++j)
                mat[i][j] = i+j; //mit Werten belegen
        for (unsigned i(0), count(0); i<m; ++i)
            for (unsigned j(0); j<n; ++j, ++count)
                cout << count << ". Wert: " << mat[i][j] << "\n"; //Ausgabe, count zählt die Anzahl der Plätze, es sollte von 0bis(m*n-1) durchnummeriert sein.
    

    Edit: bin mir grad nicht ganz sicher, ob der Zugriff über mat[i][j] nicht doch Mist ist
    Edit2: oh und deleten musst du dann selbst, wenn du meine Lösung benutzt. Wenn du keine Ahnung hast wie das geht -> gar kein new benutzen.

    Danke fuer deine Hilfe. Momentan bin ich noch auf der Arbeit, kann demnach eure Beispiele nicht testen.

    Das deleten bekomme ich hin, aber wie ich hier schon oefter gelesen habe soll es ueber std::vector besser bzw. der Richtige weg sein.
    Vielleicht kann mir ja jemand da ein beispiel geben. Habe von der Methode noch nichts gehort oder gelesen.

    vielen Dank:)



  • out schrieb:

    Sone schrieb:

    Na erstens heißt es Präfix-Inkrement 😃

    🤡 Es gibt auch Leute, die zwischendurch mal Englisch schreiben.

    Das ist auch gut. Aber da hat Cyres dann das 'ix' vergessen. 🙂



  • Sone schrieb:

    Das ist auch gut. Aber da hat Cyres dann das 'ix' vergessen. 🙂

    Nein, Präinkrement bezieht sich auf die Semantik und heißt, dass das Inkrement vor der Auswertung passiert. Präfix-Inkrement bezieht sich auf die Syntax und heißt, dass der Inkrement-Operator vor dem Operanden steht. K&R haben sich glücklicherweise dafür entschieden, dass die beiden übereinstimmen, das hätte man theoretisch auch anders machen können.



  • Bashar schrieb:

    Sone schrieb:

    Das ist auch gut. Aber da hat Cyres dann das 'ix' vergessen. 🙂

    Nein, Präinkrement bezieht sich auf die Semantik und heißt, dass das Inkrement vor der Auswertung passiert. Präfix-Inkrement bezieht sich auf die Syntax und heißt, dass der Inkrement-Operator vor dem Operanden steht. K&R haben sich glücklicherweise dafür entschieden, dass die beiden übereinstimmen, das hätte man theoretisch auch anders machen können.

    👍
    Sowas lernt man nur mit Bash-ar.



  • Und um es abzuschließen, ich habe bewusst Preinkrement benutzt, weil das auch die Fälle einschließt, wo es die Operatoren nicht gibt. Es sollte vermieden werden, eine zusätzliche Kopie zu erzeugen. In diesem Fall würde der Compiler das mit leichtigkeit erkennen, bei benutzerdefinierten Typen gibt es allerdings fälle, wo sich der Compiler recht schwer fällt, außerdem erleichtert es den Lesefluss, was aber nur eine subjektive Meinung ist.


Anmelden zum Antworten