Ich versuche Elemente in einer Liste zu entfernen, wenn eine Bedingung in einem std::list
erfüllt ist. Was ich in der Referenz über den Rückgabewert der Funktion erase
gelesen haben:Entfernen Sie einen Eintrag aus einer Std :: Liste während Iterator
Ein Iterator zeigt auf das Element, das das letzte Element gefolgt durch den Funktionsaufruf gelöscht. Dies ist das Containerende, wenn die Operation das letzte Element in der Sequenz gelöscht hat.
Member-Typ-Iterator ist ein bidirektionaler Iterator-Typ, der auf Elemente zeigt.
ich dieses Beispiel zusammengestellt haben:
#include <string>
#include <list>
#include <iostream>
int main()
{
typedef std::list<std::string> string_list_t;
string_list_t list;
list.push_back("test1");
list.push_back("test2");
list.push_back("test3");
list.push_back("test4");
list.push_back("test5");
list.push_back("test6");
list.push_back("test7");
list.push_back("test8");
for (string_list_t::iterator it = list.begin(); it != list.end(); ++it)
{
std::string &str = *it;
std::cout << "Checking " << str << "..." << std::endl;
if (str == "test4")
{
std::cout << "Found test4!" << std::endl;
}
else
{
it = list.erase(it);
}
}
return 0;
}
Es gibt mir nicht die erwartete Leistung, stattdessen gibt es mir:
Checking test1...
Checking test3...
Checking test5...
Checking test7...
Kann mir jemand helfen, herauszufinden, was ich verstanden falsch? Irgendwie überspringt es jedes zweite Element ...
gnaaaaah dingt. Danke! – Nidhoegger