Ich möchte ein Element mit der Löschmethode aus einem Vektor löschen. Das Problem hierbei ist jedoch, dass das Element nicht garantiert nur einmal im Vektor vorkommt. Es kann mehrmals vorhanden sein und ich muss alle löschen. Mein Code ist ungefähr so:
void erase(std::vector<int>& myNumbers_in, int number_in)
{
std::vector<int>::iterator iter = myNumbers_in.begin();
std::vector<int>::iterator endIter = myNumbers_in.end();
for(; iter != endIter; ++iter)
{
if(*iter == number_in)
{
myNumbers_in.erase(iter);
}
}
}
int main(int argc, char* argv[])
{
std::vector<int> myNmbers;
for(int i = 0; i < 2; ++i)
{
myNmbers.push_back(i);
myNmbers.push_back(i);
}
erase(myNmbers, 1);
return 0;
}
Dieser Code stürzt offensichtlich ab, weil ich das Ende des Vektors ändere, während ich ihn durchlaufe. Was ist der beste Weg, um dies zu erreichen? Dh gibt es eine Möglichkeit, dies zu tun, ohne den Vektor mehrmals zu durchlaufen oder eine weitere Kopie des Vektors zu erstellen?
std::remove()
Verschiebt Elemente so, dass die zu entfernenden Elemente überschrieben werden. Der Algorithmus ändert die Größe des Containers nicht. Wennn
Elemente entfernt werden, ist nicht definiert, welchen
Elemente die letzten sind.