Vector frage
-
Ich hab diese Seite über Vectoren gefunden und verstehe etwas nicht:
http://de.wikibooks.org/wiki/C++-Programmierung:_Vectoreiner Zeile steht ++v[i];, und ich verseh nicht was die bedeutet. ich kenn i++ aber was macht dann diese Zeile?
-
alterbro schrieb:
einer Zeile steht ++v[i];, und ich verseh nicht was die bedeutet. ich kenn i++ aber was macht dann diese Zeile?
Ok, wie geht man da am Besten vor? So:
v
ist ein Bezeichner/Name, in diesem Fall für einenstd::vector
.
2. Links und rechts vom Bezeichner steht jeweils ein Operator. Wir werfen einen Blick in die Operator Precedence Tabelle. Wir sehen, dass der operator[] (Array subscripting) stärker bindet, als der Prefix-Increment-Operator (++).
3. D.h. als erstes gibt uns
v[i]
eine Referenz auf das i-te Element des Vectorsv
zurück. (Das sehen wir hier)4. Als zweites wird der Wert des i-te Elements mit dem Prefix-Increment-Operator um 1 erhöht. (da inkrement)
Fazit: Der Wert des i-ten Elements des Vectors
v
wird um 1 erhöht.
-
ok, danke, jetzt machts auch sinn.
-
ich hab noch ne frage:
kann man mehrere vectoren zu einem grossen verbinden, bzw. hinzufügen?
Ich weiss, das ging mit einer Schleife, aber das muss wärend des Programms sehr oft gemacht werden, und vielleicht gibts dafür ja eine sehr schnelle natice funtion?
-
for( auto iter : v1 ) { v2.push_back( iter ); }
-
ok, danke
-
std::vector<int> v1 = { 1, 2, 3, 4, 5 }; std::vector<int> v2 = { 6, 7, 8, 9, 10 }; v1.insert(v1.end(), v2.begin(), v2.end());
-
offget schrieb:
for( auto iter : v1 ) { v2.push_back( iter ); }
Der Nachteil bei dieser
FunktionMethode ist außerdem noch, dass man die Objekte zweimal kopiert.
-
super, danke
-
offget schrieb:
for( auto iter : v1 ) { v2.push_back( iter ); }
Außerdem kann es passieren, dass
v2
seinen Speicher mehrere Male reallokieren muss. Ethons hat´s richtig gemacht.
-
etwas möchte ich noch wissen:
erstellt ein Vector eine Kopie der Objekte oder einen Zeiger darauf?
-
Kopien.
Wenn es möglich ist, darf ein Objekt auch gemoved werden, aber das ist ein Implementierungsdetails - für dich als Vectornutzer sieht es trotzdem wie eine Kopie aus.
-
danke, aber kann man einen vector auch für einen Zeiger verwenden?
UNd wenn ja wie?
-
alterbro schrieb:
kann man einen vector auch für einen Zeiger verwenden?
klar
edit: zum "wie":
std::vector<MyClass*> myvec; MyClass* myClassPointer = GetMyClassPointer(); // irgendwie einen Pointer holen/erzeugen myvec.push_back(myClassPointer);
-
und wie?
Irgendwie schaf ichs nicht.
-
alterbro schrieb:
und wie?
Irgendwie schaf ichs nicht.wenn dir mein Beispiel nicht reicht, musst du wohl mal Code zeigen...
-
naja,dass
static std::vector<*texture> texptr;
funktioniert nicht
-
Es muss ja auch
static std::vector<texture *> texptr;
heißen.
Edit: Merk dir bitte für die Zukunft: "funktioniert nicht" ist keine Fehlermeldung, mit der man viel anfangen kann.
-
alterbro schrieb:
funktioniert nicht
Ich sollte mal nman fragen, ob er einen Filter für das Forum bauen kann, der Beiträge mit dieser Problembeschreibung automatisch verbietet.
-
sorry, es gibt diesen compilerfehler
/home/marvin/Prog/actprojects/DustRider/machine/../tools/geo/../../tools/geo/../../tools/texture/texture.h|18|Fehler: »*« kann nicht in einem Konstanten-Ausdruck auftreten|
ok, danke scheint zu funktionieren