Frage zu STL <vector>
-
Hi,
ist vielleicht eine blöde Frage, aber ich komm einfach nicht dahinter, mein Buch gibt leider auch nicht mehr her.
Ich versuche eine Variable vom Typ vector<int> zu erzeugen, kann jedoch mit dieser nicht so umgehen, wie ich es mir vorgestellt habe.
Ich möchte auf das Array nacheinander Werte zum Schluss speichern, jedoch funktioniert das nicht mit der Methode push_back(). Wenn ich z.B. vector<int> seedList(5) intialisiere, dann kann ich nur auf 5 Werte zugreifen und jeder weiters hinzugefügte Wert geht verloren. Der Wert von .size() ändert sich auch nicht. Wie ist der Gebrauch hier wirklich? In meinem Buch ist beschrieben, dass dies die ideale Klasse für mein Problem ist, schneller Zugriff auf das Ende des dynamischen Arrays und ein schneller iterativer Zugriff.
-
Zeig mal den Sourceausschnitt zum Problem
-
vector<int> seedList(5);mit diesem code werden fünf elemente erzeugt und kann aber keine anfügen, bzw. der Wert von size ändert sich nicht.
Eigentlich will ich ja keinen Initialisierungswert angeben müssen, sondern immer nur einen Wert anhängen, aber wenn ich
vector<int> seedList()schreibe, dann kann ich seedList nicht mehr wie gewohnt übergeben.
Kannst du mir ein bsp. schreiben?
-
#include <vector> int main() { ... std::vector<int> ivec; for (int i = 0; i < 5; ++i) ivec.push_back(i); ... }
Das sollte eigentlich wie von dir erhofft funktionieren (VC6 !?).
mfg JJ
-
#include <vector> #include <iostream> int main() { std::vector<int> seedList; for(int i = 0;i < 100;++i) seedList.push_back(i); std::cout<<seedList.size(); }Da war ich zu langsam ;o)
-
Danke für eure schnelle Antwort. Ich hab jetzt zwar den Fehler gefunden, aber verstehen tu ich ihn nicht.
Ich habe seedList in mehreren Methoden verwendet und diese immer als Parameter übergeben, nachdem sich die Adresse bei einer Übergabe immer geändert hat, habe ich diese const deklariert, was aber leider nichts genützt hat, die Adresse der Variable hat sich trotzdem geändert. Seitdem ich die Variable const in die Klassendefinition geschrieben habe funktioniert es. Kann mir jemand dieses Problem erklären?
-
Lässt sich ohne Code nix zu sagen, nur wild raten
-
mattias schrieb:
Eigentlich will ich ja keinen Initialisierungswert angeben müssen, sondern immer nur einen Wert anhängen, aber wenn ich
vector<int> seedList()schreibe, dann kann ich seedList nicht mehr wie gewohnt übergeben.
Das ist ja auch eine Funktionsdeklaration und keine Objektinstanziierung. Du deklarierst hier eine Funktion namens seedList, die keine Argumente erwartet und einen vector<int> als Rückgabewert liefert.
Lass mal die Klammer weg.Das aber nur nebenbei

-
Ups! Blöder Tippfehler. Der nachfolgende Code hat mir den oben beschriebenen Fehler gebracht.
vector<int> seedList; // ist in einer Methode deklariert, die IdentifyElements aufruft void AlgoOPTICS::IdentifyElements(vector<int> seedList, int beginList, int level) { RangeQueryInsert(seedList, q); //Füllt die Liste mit Werten for(int j=beginList; j < seedList.size(); j++) { IdentifyElements(seedList, j, ++level); } }Ich hab diesen Code so hingeschrieben, wie ich ihn gehabt habe, im alten Programmcode habe ich noch zusätzlich SeedList const übergeben.