iterator löschen
-
Hallo NG,
multimap<unsigned int, Something *> manyObjects; pair<multimap<unsigned int, Something *>::iterator, multimap<unsigned int,Something *>::iterator> listOfDublicatedObjects; multimap<unsigned int,Something *>::iterator aObject; listOfDublicatedObjedts = manyObjects.equal_range(4711); for( aObject = listOfDublicatedObjects.first; aObject != listOfDublicatedObjects.second; aObject++) { // Do somthing with the object }Ich habe hier eine Liste an doppelten Einträgen aus einer multimap. Nach dessen Bearbeitung würde ich listOfDublicatedObjects gerne löschen. Da die Liste von der STL angelegt wurde, weiß ich nun nicht wie?
listOfDublicatedObjects.first = listOfDublicatedObjects.secondWürde wie eine leere List aussehen, aber ich würde der STL ins Handwerk pfuschen. Und eine Funktion wie ich die Liste lösche, scheint es nicht zu geben.
Weiß mir jemand einen Tipp?
Gruß
M. Incani
-
Interesssant !

-
Hallo NG,
sorry für den vorherigen Müll, ich hab aus versehen Absenden erwischt. Nun aber zu meiner Frage.
multimap<unsigned int, Something *> manyObjects; pair<multimap<unsigned int, Something *>::iterator, multimap<unsigned int,Something *>::iterator> listOfDublicatedObjects; multimap<unsigned int,Something *>::iterator aObject; listOfDublicatedObjedts = manyObjects.equal_range(4711); for( aObject = listOfDublicatedObjects.first; aObject != listOfDublicatedObjects.second; aObject++) { // Do somthing with the object }Ich habe hier eine Liste an doppelten Einträgen aus einer multimap. Nach dessen Bearbeitung würde ich listOfDublicatedObjects gerne löschen. Da die Liste von der STL angelegt wurde, weiß ich nun nicht wie?
listOfDublicatedObjects.first = listOfDublicatedObjects.secondWürde wie eine leere List aussehen, aber ich würde der STL ins Handwerk pfuschen. Und eine Funktion wie ich die Liste lösche, scheint es nicht zu geben.
Weiß mir jemand einen Tipp?
Gruß
M. Incani
-
Hallo,
sorry für den wertlosen Beitrag, ich hatte statt Vorschau Absenden erwischt.
Gruß M. Incani
Simon2 schrieb:
Interesssant !

-
Es gibt auch sowas wie "Editieren"

-
Wie? Wo? Kann ich einen bereits abgeschickten Beitrag editieren?
KasF schrieb:
Es gibt auch sowas wie "Editieren"

-
Also. "listOfDuplicatedObjects loeschen" kann man verschieden interpretieren.
Die Variable an sich ist ein Iteratorpaar, keine Liste an sich. Dieses Iteratorpaar zu loeschen hat keinen grossartigen Sinn in meinen Augen, vie alle anderen Objekte auch wird das automatisch geloescht sobald du den Scope verlaesst.den Teil des Multimap zu loeschen, der aus Eintraegen mit gleichem Key besteht, ist etwas einfacher:
multimap<unsigned int, Something *> manyObjects; typedef multimap<unsigned int, Something *>::iterator multimapIter; //machts etwas lesbarer pair<multimapIter, multimapIter> listOfDublicatedObjects = manyObjects.equal_range(4711); for(multimapIter aObject = listOfDublicatedObjects.first; aObject != listOfDublicatedObjects.second; aObject++) { // Do somthing with the object } //alles erledigt, was zu erledigen war? also alles loeschen was dazwischen liegt! manyObjects.erase(listOfDublicatedObjects.first, listOfDublicatedObjects.second); // so einfach ist das!sollte zumindest funktioniern...
/edit: den edit-link findest du rechts oben ueber deinem jeweiligen Post, direkt neben dem "Zitieren" link, den du offensichtlich schon gefunden hast

-
pumuckl schrieb:
Die Variable an sich ist ein Iteratorpaar, keine Liste an sich. Dieses Iteratorpaar zu loeschen hat keinen grossartigen Sinn in meinen Augen, vie alle anderen Objekte auch wird das automatisch geloescht sobald du den Scope verlaesst.
den Teil des Multimap zu loeschen, der aus Eintraegen mit gleichem Key besteht, ist etwas einfacher:
sollte zumindest funktioniern...
/edit: den edit-link findest du rechts oben ueber deinem jeweiligen Post, direkt neben dem "Zitieren" link, den du offensichtlich schon gefunden hast

Ich will die Objekte der Multimap garnicht löschen. Ich würde gerne dafür sorgen, daß das Iteratorpaar wieder leer ist.
Gruß M. Incani
-
BlackPepper schrieb:
Ich will die Objekte der Multimap garnicht löschen. Ich würde gerne dafür sorgen, daß das Iteratorpaar wieder leer ist.
Gruß M. Incani
Im Iterator ist nicht wirklich "was drin", sondern er zeigt auf etwas, also kann man hin wohl auch nicht leeren. Ob man dafuer sorgen kann, dass er auf nix mehr zeigt, ist ne andere Frage. Aber wozu sollte man das wollen?
Entweder du moechtest ihn anderweitig benutzen, dann weise ihm neue Werte zu und gut ist. Oder du willst ihn garnicht mehr benutzen, dann lass ihn einfach links liegen und den Compiler am Ende des Scopes die Aufraeumarbeiten machen. In beiden Faellen wird weder der Iterator an deiner Multimap rumpfuschen, wenn du es ihm nicht sagst, noch wird eine Aenderung an der Multimap uer Probleme sorgen.Es sei denn, du dereferezierst den Iterator, nachdem du die multimap geloescht hast oder anderweitig Schu=indluder betreibst
Aber das scheinst du ja nicht vor zuhaben.Und auch das Iteratorpaar an sich kann man nicht leeren, denn als ein Paar besteht es immer aus zwei Iteratoren, niemals aus einem oder gar keinem
