[Vector] Immer auf das gleiche Element zeigen

The-Kenny

Grünschnabel
Hallo,

Ich habe ein kleineres (oder größeres) Problem mit den Vekoren aus der Stdlib.

So wie ich es gesehen (und getestet) habe, zeigt ein iterator im Vektor immer auf eine Stelle, aber nicht immer auf das selbe Element.

Wenn z.b. ein Vektor die zahlen von 0 bis 9 enthält und ich einen iterator auf das 3. Element habe, zeigt dieser anfangs auf den Wert 2.

Wenn ich aber nun die erste Stelle des vectors lösche, zeigt der iterator zwar immer noch auf die 3. Stelle, jedoch nun auf den Wert 3, da sich die Elemente verschoben haben.

Ich brauche also sowas wie eine feste Referenz.
Aufgrund der Performance währe es denke ich nicht sehr sinnvoll, alle iteratoren des Vektors im 1 zu decrementieren bei so einer Situation.
Nur leider fällt mir keine andere Lösung ein, ich hoffe, hier weiß jemand eine.

Gruß,
The-Kenny
 
Zuletzt bearbeitet:
Hallo,

Warum hälst du für jedes Element in dem Vector einen eigenen Iterator?
Dann hättest du auch nicht das Problem jeden Iterator dekrementieren zu müssen.
Wenn du ein Element aus dem Vector haben willst, kannst du doch einen temporären Iterator anlegen und bis zum n-ten Element schieben.

Aber ich weiß ja nicht genau was du vor hast.

MfG Turri
 
Argh, das ist nicht so leicht zu erklären.

Ich habe eine Karte aus 10 mal 10 Feldern, auf denen jeweils eine Einheit stehen kann oder nicht.
Die Karte selber ist eine Klasse, die ein array aus der Klasse "map_part" enthält.

jetzt wollte ich aus performance Gründen nicht auf jedem Feld der Karte eine Instanz von "Unit" erstellen, sondern lieber in einem vector.
jedoch kann eine Einheit halt auch zerstört werden, d.h. ich muss sie aus dem Vektor löschen.

Um immer einen termporären iterator zu erstellen müsste ich denVektor immer durchgehen und überprüfen ob die x und y Koordinaten aufeinander passen, das ist doch auch keine sehr elegamte Lösung, oder?

Hoffe auf ein paar Anreize ;)

The-Kenny
 
So ganz kann ich glaube noch nicht folgen,

Was ist so schlimm dran, einen temporären Iterator zu nutzen, das dauert ne Milisekunde den Vector von 100 Einträgen durchzugehen ;-)

Ich finde so viele Iteratoren zu nutzen ist speicherfressend ;-)

Wird das nen größeres Game weil du so auf Performance achten willst.

Wenn du nen Element bei deiner Vector Version aus dem Vector löschst, dann ist ja dann am Ende ein Iterator zu viel vorhanden, das knallt dann aber falls du auf den zugreifst.
Finde ich auch nicht gut.

jetzt wollte ich aus performance Gründen nicht auf jedem Feld der Karte eine Instanz von "Unit" erstellen, ...
Ne Idee wäre, nur Zeiger anlegen anstatt der Objekte... ist der Zeiger NULL ist keine Unit da... oder du baust nen booleschen Wert ein, um zu sehen ob eine Unit auf einem Feld ist.

MfG Turri
 
Naja, der Vektor wird maximal 32*4 Einheiten enthalten, das mit dem durchgehen würde also gehen^^

Und das mit dem Pointer ist mir noch garnicht in den Sinn gekommen, danke dafür :)
 
Jo, war nur so eine Idee.
Sollte eine Unit irgendwann auf nem Feld stehen kannst du ja den Zeiger der auf NULL zeigt.
ja mit
Code:
Unit* unit = new Unit();
nen Objekt zuweisen. Oder halt mit
Code:
delete unit;
unit = NULL;
dann den Zeiger wieder auf NULL zeigen lassen.

MfG Turri
 
Der std::vector ist einfach nicht der richtige Container für deine Anforderungen. Nimm eine std::list, da bleiben die Iteratoren gültig.

Wenn du nur eine Unit auf einer Position hast, würde ich sowieso entweder ein Array nehmen, wo NULL für eine Unit eben auch ein gültiger Wert ist; oder auf eine std::map ausweichen.
 
Zurück