for(it1=prime.begin();it1<prime.end();it1++){
for(it2=it1+1;it2<prime.end();it2++){
if(*it2%*it1==0){
prime.erase(it2);
}
}
if(*it1<1000)
prime.erase(it1);
}
In above code snippet i am removing numbers that are multiples of number already existing in prime vector 2 to 9999(sieve of Eratosthenes).also I only what numbers that are more then 1000, but somehow these are not getting erased.
can someone please explain me why?
Thanks in advance.
Calling
erase()
invalidates the iterator. You should use the return value, which is an iterator to the value after the element that was deleted, e.g.But if you make this change (which you must!), you need to remove
++it2
from the for loop. You also need to make both changes forit1
. Here is some untested code:Note that erasing
it2
will not invalidateit1
, because it occurs strictly beforeit2
due to theit2 = it1 + 1
. So you don't need to concern yourself with that interference.If you want to erase item and loop, you need do 'it1=prime.begin();' again after erasing. Because of the arrangement.