array into vector



  • Guten Morgen

    ich hab ein kleines Problem, wobei mir sicherlich einer helfen kann

    ich möchte einfach

    meine_struct array[10][10];
    

    umwandeln in einen vector. Was ich jetzt nicht ganz verstanden habe

    vector<int vector<int> > vec; // das geht ja wohl nicht, und selbst wenn, wo kommt den dann meine_struct hin?
    

    Der erste Poster ( sinnvoller ) darf sich auch einen Kaffee nehmen 🙂



  • Normalerweise macht man std::vector<std::vector<meine_struct> >

    Dabei ist auf das Whitespace zwischen den > zu achten.

    Diese Konstruktion entspricht nicht ganz einem zweidimensionalen Array, da man die Länge jedes Untervectors anders wählen kann. Die dazu notwendigen Informationen erhöhen den Overhead. Für den Anfang ist das aber ganz sinnvoll.



  • hmmm

    ich hab jetzt mal

    std::vector<std::vector<meine_struct> >;

    eingegeben und folgende fehlermeldung erhalten

    d:\meine Projekte\testprogramm\main.cpp(35): error C2208: 'std::vector<_Ty,_Ax>' : Keine Elemente definiert, die diesen Typ verwenden
    with

    Wenn es gehen sollte, wie sage ich ihm dann die grösse?



  • std::vector<std::vector<meine_struct> > vec( dimension1, std::vector<meine_struct>( dimension2, default wert) )
    


  • danke
    aber es kommen immer noch 3 errors 😕
    nicht böse sein

    std::vector<std::vector<meine_struct> > vec( 15, std::vector<meine_struct>( 20, default 15) );

    dann kommt

    error C2059: Syntaxfehler : ')'
    error C2059: Syntaxfehler : 'constant'
    error C2143: Syntaxfehler : Es fehlt ')' vor ';'

    hmm obwohl ich 2 offene und 2 geschlossene klammern habe. komisch

    wenn ich erst zur laufzeit die grösse weiss, dann mach ich nur

    std::vector<std::vector<meine_struct> > vec; // nur so oder?



  • ohne das default.

    einfach nur 15. Es muss aber einen Konstruktor von meine_struct geben, der die 15 annimmt. Ansonsten nimmt man ein temporäres Objekt zum Initialiserien:

    std::vector<std::vector<meine_struct> > vec( 15, std::vector<meine_struct>( 20, meine_struct(15) ) );

    Der Ansatz mit den veränderlichen vectoren ist ok. Zum Verändern gibt es resize().



  • langsam hasse ich die klasse vector

    hab wieder die gleichen 3 errors.

    aber da ich es sowieso dynamisch machen will, hab ich noch keine grösse angegeben

    jetzt hab ich das resize nehmen

    vec.resize(5);  // geht, aber jetzt habe ich ja nur die 1ste dim. wie mach ich die 2te auch hin?
    vec.resize(5,vec.resize(20));  // so wird das leider nichts
    vec.resize(5,20); // hier auch nicht
    

    hmm warum machen die, die Klasse nicht einfacher?

    z.B.

    meine_struct mein_vector[20][10];  // wie ein array eben. soll ja ein array ersetzen
    

    Vielen Dank für deine Mühe 👍 macht nicht jeder hier.



  • Das ist in deinem Fall schwieriger, da std::vector kein direkter Ersatz für zweidimensionale Arrays ist.

    Eine leere Matrix deiner Art kann man so resizen:

    vec.resize( dim1, std::vector<meine_struct>(dim2));

    Du solltest dir aber auch mal die Dokumentation des vectors durchlesen.



  • manchmal ist es u.u. sinnvoller, ein 2d-auf ein 1d-array zu projizieren.
    schreibe dir doch eine funktion "Fkt_2d_To_1d(int x,int y)", die dir dann den entsprechenden Wert setzt, zurückgibt oder was du auch immer benötigst. einfach zeilenbreite mit y multiplizieren und x addieren.
    dann reicht auch ein std::vector<int>(x*y)
    reg.usw...



  • ja die hilfe hab ich schon genommen, aber da ist alles auf 1d bezogen 😞

    ich wollte jetzt mal die dimensionen herausfinden

    z.b. die x und y werte

    int i = vec.size();     // hier wie lang der ist, sprich x wert
    	int i2 = vec[0].size();  // hier wie lang jeweils ist
    
    //vec[0].size(); da ist es ja egal ich könnte auch vec[3] nehmen. gibts da ne bessere möglichkeit? denn alle elemente haben ja die gleiche y länge, könnte verwirrend sein wenn ich immer vec[0] hinschreibe.
    

    wie kann ich z.b. im feld(5,3) mein struct speichern?

    habe es so versucht

    vec[5].insert(3,meine_variable);  // warum klappt das nicht? ist ja x=5 und dann einfach ins 3te feld rein. hmmm komisch
    

Anmelden zum Antworten