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
withWenn 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 seinstd::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