Element aus Container löschen
-
Servus,
ich finde kein Äquivalent zu Javas mylist.remove( thisstring );
Wie wird das in C++ effizient gemacht - muss ich da erst einen Iterator und den Index holen und dann mit erase das Objekt zum Index löschen?Vielen Dank falls jemand ein Codesnippet oder einen Link hat.
-
Hallo Jay1980,
der Link sollte dein Vorhaben lösen.
http://en.wikipedia.org/wiki/Erase-remove_idiomso long,
Chris
-
Mit
erase(), siehe www.cplusplus.com.Ja, dazu brauchst du einen Iterator, den du dir mit
std::find()suchen kannst. Bei mehreren Vorkommen kannst du auchstd::remove()anwenden.
-
Hallo,
Was für eine Liste ist das denn? std::liststd::string?
Du must den string logischerweise erst finden bevor du ihn löschen kannst. Er könnte schließlich auch mehrfach vorkommen.
Es gibt dafür find, erase und remove. Das kann man alles schön kombinieren.
-
Ah so gings:
remove( mylist.begin(), mylist.end(), mystring );Oh, ich las die ganzen vorherigen schnellen Antworten nicht, bevor ich dies postete - was ist von meinem Ansatz zu halten?
-
Jay1980 schrieb:
Ah so gings:
remove( mylist.begin(), mylist.end(), mystring );Nein, das entfernt
mystringnicht aus dem Container. Schau dir pchris' Link an.
-
Jay1980 schrieb:
ich finde kein Äquivalent zu Javas mylist.remove( thisstring );
Doch, das funktioniert genau so auch in C++ (TR1? C++0x?)
std::list<std::string> mylist = { "dum", "di", "dum" }; std::cout << mylist.size() << std::endl; mylist.remove("dum"); std::cout << mylist.size() << std::endl;Die Konsolenausgabe:
3 1mfg, NRWsoft
-
Stimmt,
std::listhat ja hier eine Spezialbehandlung, die ich immer vergesse. Guter Hinweis!
std::list::remove()existiert schon in C++98.