Silme yöntemini kullanarak bir vektörden bir öğeyi temizlemek istiyorum. Ancak buradaki sorun, elementin vektörde yalnızca bir kez meydana gelmesinin garanti edilmemesidir. Birden çok kez mevcut olabilir ve hepsini temizlemem gerekiyor. Kodum şuna benzer:
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;
}
Bu kod açıkça çöküyor çünkü içinde yineleme yaparken vektörün sonunu değiştiriyorum. Bunu başarmanın en iyi yolu nedir? Yani, vektörü birden çok kez yinelemeden veya vektörün bir kopyasını daha oluşturmadan bunu yapmanın bir yolu var mı?
std::remove()
öğeleri, kaldırılacak öğelerin üzerine yazılacak şekilde kaydırır. Algoritma, kabın boyutunu değiştirmez ven
öğeler kaldırılırsa, sonn
öğelerin ne olduğu tanımsızdır .