multimap und erase
-
hallo zusammen
habe wieder ein problem mit einer multimap hoffe ihr könnt mir
helfen.
eine multimap erhält als key ein datum, als value eine anzahl an arbeitsstunden.
um nun z.B. für einen zeitraum meine arbeitsstunden zu loeschen, speichere ich
per schleife
Datum1 >= in einen iterator pos1
und
Datum2 <= in einen iterator pos2
nun möchte ich mit erase (pos1,pos2) diesen zeitraum löschen.
das problem, es wird nur von pos1 bis zur pos2 -1 gelöscht, habe es nun mit
erase (pos1,++pos2) gelöst, aber wie sieht es dann am ende des containers aus??
obwohl end() liefert ja auch ein zeiger hinter dem letzten element oder wie würdet ihr das lösen?? (schreibstil katastrophe aber ich denke ihr wisst was ich meine)gruß elwida
-
Hallo,
wo genau ist dein Problem? erase(first, last) löscht die Elemente des halboffenen Intervalls [first, last). Also die Elemente die zwischen first (einschließlich) und last (nicht mit eingeschlossen) liegen. Du kannst als last-Iterator also ohne Probleme den end-Iterator verwenden.
-
hallo
habe mich schlecht ausgedrückt
ich möchte nicht von first bis last loeschen sondern nur bis mittendrin, einschlieslich mittendrin.
z.b. first ist der 1.1.2004 , mittendrin ist der 5.1.2004 hier wird aber
nur bis zum 4.1.2004 gelöscht also müsste ich den zeiger mittendrin hinter
mittendrin also ++mittendrin versetzen. was ist aber wenn mittendrin das letzte
objekt im container ist?. dann würde ich mit ++mittendrin den zeiger über
den container hinaus setzen also auf eine stelle die es gar nicht gibt?gruß elwida
-
kann man nich abfragen, if(mittendrin!=ende){mittendrin++}?^^
-
kann man aber mit !=end() bin ich mit meinem zeiger
vor dem letzten element, das würde bedeuten das
das letzte element in meinem container nicht gelöscht wird.
end() gibt einen zeiger hinter dem letzten element zurück.
was ich nicht verstehe ist, wenn ich einen zeiger ==end()
positioniere müsste das programm doch eigentlich crashen da
er doch eigentlich ins "leere" zeigt?
-
elwida schrieb:
hallo
was ist aber wenn mittendrin das letzte
objekt im container ist?dann liefert ++mittendrin das gleiche wie end.
Ich kann hier nur nochmal Hume zitieren:
HumeSikkins schrieb:
erase(first, last) löscht [...] die Elemente die zwischen first (einschließlich) und last (nicht mit eingeschlossen) liegen. Du kannst als last-Iterator also ohne Probleme den end-Iterator verwenden.
m.erase(x,++mittendrin) löscht dir immer alle elemente von x, x eingeschlossen, bis mittendrin, mittendrin eingeschlossen.
elwida schrieb:
... ins "leere" zeigen
ins leere = end.
-
dank euch
denke habs jetzt kapiertgruß elwida