Chcę usunąć element z wektora za pomocą metody wymazywania. Ale problem polega na tym, że nie ma gwarancji, że element wystąpi tylko raz w wektorze. Może występować wiele razy i muszę je wszystkie usunąć. Mój kod wygląda mniej więcej tak:
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;
}
Ten kod oczywiście ulega awarii, ponieważ podczas iteracji zmieniam koniec wektora. Jaki jest najlepszy sposób, aby to osiągnąć? Czy jest jakiś sposób, aby to zrobić bez wielokrotnego iterowania wektora lub tworzenia jeszcze jednej kopii wektora?
std::remove()
przesuwa elementy w taki sposób, że elementy do usunięcia są nadpisywane. Algorytm nie zmienia rozmiaru kontenera, a jeślin
elementy zostaną usunięte, nie jest zdefiniowane, jakie są ostatnien
elementy.