was heißt vector fehler?
-
TR1 _ist_ Standard. Nur eben nicht verpflichtend, um sich ISO-konform nennen zu dürfen.
Davon abgesehen würde ein std::vector<std::vector<int> > Deine Semantik nicht unbedingt zerstören, da man bei vector auch einen Zeiger auf einen zusammenhängenden Speicherbereich (also ein Array) bekommt, und zwar über die Adresse des ersten Elements. Musst nur drauf achten, dass der innere Vektor immer groß genug ist.
int index = handle_store[handle]; // initialize vector and copy values vector<int> cookie(vals, vals + length); // resize vector to max. size, in case length < max. size cookie.resize(DSM_RS_MAX_SIZE); tsa[index].push_back(cookie); // oder, um Kopien zu vermeiden: tsa[index].push_back(vector<int>()); tsa[index].assign(vals, vals + length); tsa[index].resize(DSM_RS_MAX_SIZE); // Und hier bekommst Du nen Zeiger auf das Array: int* vals = &tsa[index][0];
-
LordJaxom schrieb:
...Musst nur drauf achten, dass der innere Vektor immer groß genug ist....
... was ja bei Arrays auch so ist.

Also keine echte Einschränkung.Gruß,
Simon2.
-
Hallo zusammen,
das ist natürlich schon genial. Da merkt man, wer sich auskennt

Leider habe ich noch ein Problem, was ich nicht ganz verstehe:
Fehler: no matching function for call to `std::vector<int, std::allocator<int> >::push_back(std::vector<int, std::allocator<int> >&)' /usr/lib/gcc/i386-redhat-linux/3.4.6/../../../../include/c++/3.4.6/bits/stl_vector.h:557: Anmerkung: Kandidaten sind: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = int, _Alloc = std::allocator<int>]Dies betrifft die Stelle:
int index = handle_store[handle]; // initialize vector and copy values vector<int> cookie(vals, vals + length); // resize vector to max. size, in case length < max. size cookie.resize(DSM_RS_MAX_SIZE); //store tsa[index].push_back(cookie); // <-------- fehlerEs heißt ja soviel wie die Typen passen nicht, oder? Ich habe tsa als:
std::vector<std::vector<int> > tsa;also ein Vektor mit Int-Vektoren. Warum geht das nicht
?Uwe
-
Simon2 schrieb:
... was ja bei Arrays auch so ist.

Also keine echte Einschränkung.Naja, ein int[BLA_MAX_SIZE] wäre schon automatisch groß genug. Natürlich nur theoretisch, da das so ja nicht möglich ist.

-
Hallo zusammen,
ich habe es jetzt so zum fliegen bekommen:
std::vector<int> tsa[DSM_MM_TSA_MAX];void MemoryManager::storeInTSA(int* vals, int length, int handle) { int index = handle_store[handle]; // initialize vector and copy values vector<int> cookie(vals, vals + length); // resize vector to max. size, in case length < max. size cookie.resize(DSM_RS_MAX_SIZE); //store tsa[index]= cookie; }//End storeIst das ok so, oder haben die Profis noch Verbesserungsvorschläge?
Danke für Eure tolle Hilfe.Uwe
-
uwerothfeld schrieb:
Ist das ok so, oder haben die Profis noch Verbesserungsvorschläge?
Ja. Lass die zig redundanten Kommentare weg. Die Prämisse "kommentiere viel und ausführlich" ist veraltet und kommt aus den zeiten, wo variabelnnamen nur eine bestimmte Länge haben durften. Benenne lieber deine Variablen so, dass man schon aus dem Code leicht erkennen kann was passiert.
Beispiel:// resize vector to max. size, in case length < max. size cookie.resize(DSM_RS_MAX_SIZE);das ist genau das was resize tut, nicht nötig es nochmal drüber zu schreiben.
Zu viele überflüssige Kommentare sind eher eine Quelle der späteren Fehlinformation: In einem schnellen Bugfix wird mal eben die Zeile geändert, nicht aber der Kommentar. Das Resultat ist dass der Kommentar fortan Lügen über den Code beinhaltet.
-
Hallo,
ist ja völliger Blödsinn, den ich da gemacht habe. Also wieder zurück dass ganze. Ich habe also wieder:
std::vector< std::vector<int> >tsa;und
int index = handle_store[handle]; // initialize vector and copy values vector<int> cookie(vals, vals + length); cookie.resize(DSM_RS_MAX_SIZE); //store tsa[index].push_back(cookie); //<-- fehlerFehler: no matching function for call to `std::vector<int, std::allocator<int> >::push_back(std::vector<int, std::allocator<int> >&)' /usr/lib/gcc/i386-redhat-linux/3.4.6/../../../../include/c++/3.4.6/bits/stl_vector.h:557: Anmerkung: Kandidaten sind: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = int, _Alloc = std::allocator<int>] gmake[8]: *** [memorymanager.o] Fehler 1Überall wo ich google, klappt das aber so??? Jemand nen Tip? Bin am Durchdrehen.
Uwe
-
Verzichte auf den vector und arbeite mit dem int-Array
-
tsa ist ein ein vector<vector<int> >, damit ist tsa[i] ein vector<int>. Einem vector von int kann man ints hinzufügen, Du versuchst aber, ihm einen vector hinzuzufügen.
Hast Du da im Kopf eine Dimension zu viel?
-
Hallo zusammen,
ich hatte nicht ne Dimension zu viel, sondern zu wenig!!! Ich wollte je handle ein vector, n int-arrays enthält, welches ich ja durch einen vector ersetzen. von daher:
std::vector< std::vector< std::vector<int> > >tsa;Damit klappts! Vielen Dank für Eure HIlfe. Ihr ward wieder Gold wert.
Ich bin sehr begeistert.

Uwe
-
uwerothfeld schrieb:
ich hatte nicht ne Dimension zu viel, sondern zu wenig!!! Ich wollte je handle ein vector, n int-arrays enthält, welches ich ja durch einen vector ersetzen. von daher
Ich glaube aber, wenn ich mir deinen Anfangscode ansehe, das du vielleicht hiermit besser bedient wärst:
// Key: Handle std::map<int, std::vector< std::vector<int> > >Damit du direkt über das Handle die passende Liste bekommst...