JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=6dbfc5fc61b4e6345f3b2a2d3b8a7631Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Stl List durchlaufen und gleichzeitig Elemente rauslöschen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 14.09.2005, 19:45    Titel: Stl List durchlaufen und gleichzeitig Elemente rauslöschen Antworten mit Zitat

Ok, ich laufe eine stl::list mit Iteratoren durch und möchte bestimmt Objekte rauslöschen. Nur wenn ich ein Objekt rauslösche, dann wird der Iterator ja ungültig und ich müsste wieder von vorne anfangen.
Also, hab ich erst einen Temp Iterator erstelt, den mit dem richtigen gleichgesetzt, den richtigen eins weiter gesetzt und das Temp Element gelöscht. Das ging leider auch nicht. Also was nun?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 14.09.2005, 20:02    Titel: Antworten mit Zitat

Sollte die Löschen-Funktion nicht einen Iterator zurückgeben?
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 14.09.2005, 20:07    Titel: Antworten mit Zitat

mal kurz testen...
sollte das deleten dann einen Iterator zurückbgeben der auf das nächste element zeigt, so das ich einfahc weiter machen kann?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 14.09.2005, 20:14    Titel: Antworten mit Zitat

ok, es schient nicht zu funktinoieren:
CPP:
Iterator=m_RenderList.erase(Iterator);

_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 14.09.2005, 20:30    Titel: Antworten mit Zitat

liegt daran das eine std::list dafür nicht konzipiert ist sondern std::vector, hab ich doch schon im letzten thread gesagt.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 15.09.2005, 07:22    Titel: Antworten mit Zitat

Die erase()-Funktion sollte einen Iterator auf das nächste Element nach dem gelöschten liefern. Wenn keins mehr da ist, ist das list.end().

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 15.09.2005, 08:18    Titel: Antworten mit Zitat

Patrick hat Folgendes geschrieben:
liegt daran das eine std::list dafür nicht konzipiert ist sondern std::vector, hab ich doch schon im letzten thread gesagt.

also das verstehe ich jetzt nicht.
Wieso ist std::list nicht dafür konzepiert? man sollte doch rein technisch ohne probleme elemente aus einer std::list löschen können, und trotzdem weiter iterieren können. Ein std::vector müsste dazu komplett neu aufgebaut werden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 15.09.2005, 08:48    Titel: Antworten mit Zitat

xardias
Verkettete Liste bedeutet das nur das 1. und das letzte Element löschen kann, zugriff jedoch auf alle möglich ist - Informatikdefinition

Doppelt Verkettete Liste (vector) schreibt vor das vollster Zugriff auf alle Elemente möglich ist sowie löschen einer beliebigen position - Informatikdefinition

std::list wurde für dieses Vorhaben nicht konzipiert, klar geht es mit einem iterator-hack (hier muss man wirklich schon von hack sprechen) aber es geht ums Prinzip.

Nimm std::vector oder std::map
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 15.09.2005, 09:06    Titel: Antworten mit Zitat

std::list ist doppelt verkettet. std::vector ist nichts anderes als linear hintereinander liegender Speicher.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 15.09.2005, 09:07    Titel: Antworten mit Zitat

also wenn ich den stroustrup richtig verstehe, dann ist vector doch keine liste, oder?
ich dachte immer vector sei über ein simples array implementiert.

und liste ist, wenn ich den stroustrup richtig verstehe auf das löschen und einfügen von elementen optimiert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 15.09.2005, 11:42    Titel: Antworten mit Zitat

Zitat:

Wieso ist std::list nicht dafür konzepiert? man sollte doch rein technisch ohne probleme elemente aus einer std::list löschen können, und trotzdem weiter iterieren können.


Das Problem ist dann wahrscheinlich nur, dass weil ja der iterator bereits erhört wurde dann nochmal in der Schleife inkrementiert wird.

Man könnte z.B. auch ne clearliste anlegen, dauert aber halt dann auch länger, so hab ich das immer bei meinem Pacman gemacht.
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dragon
Super JLI'ler


Alter: 38
Anmeldedatum: 24.05.2004
Beiträge: 340
Wohnort: Sachsen
Medaillen: Keine

BeitragVerfasst am: 15.09.2005, 13:15    Titel: Antworten mit Zitat

Christian Rousselle hat Folgendes geschrieben:
std::list ist doppelt verkettet. std::vector ist nichts anderes als linear hintereinander liegender Speicher.

richtig

Patrick, es ist eher anders rum. Wenn man bei einen Vector ein Element löscht, dann wird das komplette Feld nochmal neu mit allen Werten angelegt und das alte gelöscht
_________________
Nur wenn man ein Ziel sieht, kann man es auch treffen.
___________
Mein Leben, Freunde und die Spieleentwicklung
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 15.09.2005, 15:42    Titel: Antworten mit Zitat

jop, das sehe ich jetzt mal genauso.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
proggaholic
Junior JLI'ler


Alter: 36
Anmeldedatum: 07.05.2005
Beiträge: 85
Wohnort: Heap
Medaillen: Keine

BeitragVerfasst am: 18.09.2005, 17:44    Titel: Antworten mit Zitat

Zitat:
list

Sequentielle Datenstruktur, die für schnelles Einfügen und Löschen an beliebigen Positionen optimiert ist, im Zugriff aber langsamer als vector...ist (doppelt verkettete Liste).


vector

Lineare Datenstruktur, die für Einfügen und Löschen am Ende der Datenstruktur sowie schnellen Zugriff auf beliebige Positionen optimiert ist (dynamisches Array).
Verwenden Sie vector, wenn Sie Elemente vorzugsweise am Ende einfügen oder löschen und ansonsten den indizierten Zugriff mit [] oder at() (at() prüft auf gültigen Index) nutzen wollen.


Dirk Louis im "C/C++ Kompendium", S. 1207/1208
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum