Array mit Vektor



  • Hallo 🙂

    Ich versuche einen Array zu machen der einen fixen Wert hat [10] und in jedem Feld ist ein vektor der noch nicht definiert ist wo ich so viele Zahlen einfügen kann wie ich will

    Habe es nun so versucht:

    struct Vektor{
            E *values;
            size_t bucketzaehler;
    
            Vektor():bucketzaehler(0), new vector<E> values{}
        };
    
        struct Arr{
            Vektor val;
        };
    

    und dann in einer Methode

    temp= new Arr[10];
    
    for(size_t a=0; a<10; a++){
                if(temp.val[a].bucketzaehler>0){
                    for(size_t b=0; temp.val[a].bucketzaehler>b; b++){
                        rc[p++] = temp.val[a].values;
                    }
                }
        }
    

    leider bekomme ich jetzt Fehlermeldungen:
    Beim Konstruktor:

    error: expected identifier before 'new'
    error: expected '{' before 'new'

    und bei der Zeile wo ich temp= new Arr[10]; habe

    error: 'temp' was not declared in this scope

    Könnt ihr mir helfen? Danke



  • Darf ich fragen wo oder wie du C++ lernst?



  • Auf deinen Code will ich mal nicht eingehen. Wenn du 10 dynamische Arrays brauchst schlag ich vor du nimmst einfach

    std::array<std::vector<E>,10> ar;
    


  • out schrieb:

    Auf deinen Code will ich mal nicht eingehen. Wenn du 10 dynamische Arrays brauchst schlag ich vor du nimmst einfach

    std::array<std::vector<E>,10> ar;
    

    ok.. und wie kann ich da nun werte einfügen? 😕 bin noch ein ziemlicher beginner sry

    geht das dann mit

    ar[position].push_back(zahl);
    

    ? 😕

    bzw brauche ich ja auch einen zähler damit ich weiß wie viele werte in meinen einzelnen Vektoren drinnen sind
    wie kann ich das realisieren?



  • christl_ schrieb:

    out schrieb:

    Auf deinen Code will ich mal nicht eingehen. Wenn du 10 dynamische Arrays brauchst schlag ich vor du nimmst einfach

    std::array<std::vector<E>,10> ar;
    

    ok.. und wie kann ich da nun werte einfügen? 😕 bin noch ein ziemlicher beginner sry

    Erstmal schaust du, ob dein Compiler std::array unterstützt. Kopier einfach mal nur die Zeile in dein Projekt und versuch es zu kompilieren. Ansprechen tust du die einzelnen std::vector ganz normal mit

    ar[0]
    ar[1]
    ar[2]
    // bis
    ar[9}
    

    Willst du einen Wert im std::vector einfügen, nimmst du push_back

    ar[0].push_back( 123 );
    ar[1].push_back( 456 );
    ar[2].push_back( 789 );
    // bis
    ar[9}.push_back( 123 );
    

    christl_ schrieb:

    bzw brauche ich ja auch einen zähler damit ich weiß wie viele werte in meinen einzelnen Vektoren drinnen sind

    Ne das brauchst du Gott sei Dank nicht:

    cout << "Es sind " << ar[0].size() << " Elemente im std::vector";
    


  • out schrieb:

    christl_ schrieb:

    out schrieb:

    Auf deinen Code will ich mal nicht eingehen. Wenn du 10 dynamische Arrays brauchst schlag ich vor du nimmst einfach

    std::array<std::vector<E>,10> ar;
    

    ok.. und wie kann ich da nun werte einfügen? 😕 bin noch ein ziemlicher beginner sry

    Erstmal schaust du, ob dein Compiler std::array unterstützt. Kopier einfach mal nur die Zeile in dein Projekt und versuch es zu kompilieren.

    Leider steht es dass array und vector keine member of std sind 😕 und ich glaub ich darf sie nicht includen
    weil dann kommt noch ne Fehlermeldung wegen

    #ifndef __GXX_EXPERIMENTAL_CXX0X__
    #error This file requires compiler and library support for the \
    ISO C++ 2011 standard. This support is currently experimental, and must be \
    enabled with the -std=c++11 or -std=gnu++11 compiler options.
    #endif

    aber ich hab noch ne kurze Frage

    wenn ich zb
    double a= 8.8;
    size_t b= 7;
    size_t c= b*4/a;

    wie kann ich es machen, dass c wieder ein size_t und kein double wird?



  • christl_ schrieb:

    weil dann kommt noch ne Fehlermeldung wegen

    #ifndef __GXX_EXPERIMENTAL_CXX0X__
    #error This file requires compiler and library support for the \
    ISO C++ 2011 standard. This support is currently experimental, and must be \
    enabled with the -std=c++11 or -std=gnu++11 compiler options.
    #endif

    Hast du die Fehlermeldung auch gelesen? Sie könnte nämlich nicht aussagekräftiger sein...



  • probier mal den Aufruf von g++ mit Optionen -std=c++0x oder g++ -std=g++11

    was std::vector etc angeht: hast du using namespace std;'' vergessen ? Oder besser:using std::vector; using std::array;'' usw

    was den "error: expected .." angeht: Um einen Vektor mit new in die Initialisierungsliste zu schreiben, nimmt man eher sowas wie:

    Vektor() : bucket_zaehler(0), val(new vector<E>(10)){ ...}

    wobei val vom Type vector<E>* sein muß.



  • und daß c ganzzahlig wird, erreicht man mit floor(b*4/a) (und #include<cmath>)



  • großbuchstaben schrieb:

    was std::vector etc angeht: hast du using namespace std;'' vergessen ? Oder besser:using std::vector; using std::array;'' usw

    Nee, er hat nur kein #include <vector> und kein #include <array> und weil es eine Hausaufgabe ist und er C mit Klassen lernt darf er es auch nicht.



  • dann ist diese Frage im C++ Unterforum ja genau richtig platziert 😃



  • anscheinend darf ich jetzt doch
    #include vector
    verwenden

    nun habe ich trotzdem in meiner Zeile mit

    std::array<std::vector<E>,zaehler>ar;
    

    3 Fehler

    'array' is not a member of 'std'
    expected primary-expression before ',' token
    'ar' was not declared in this scope

    😕



  • Da steht er weiß nicht was "array" ist, weil du noch #include <array> brauchst.


  • Mod

    großbuchstaben schrieb:

    und daß c ganzzahlig wird, erreicht man mit floor(b*4/a) (und #include<cmath>)

    Ich denke nicht, dass dies die gesuchte Antwort auf das Problem ist. Denn es ist gar kein Problem da.



  • auch wieder wahr


Log in to reply