The call erase()cancels the iterator. You should use the return value, which is an iterator, to the value after the element to be deleted, for example.
it2 = prime.erase(it2);
( !), ++it2 for. it1. :
for (it1 = prime.begin(); it1 < prime.end();) {
for(it2 = it1 + 1; it2 < prime.end();) {
if (*it2 % *it1 == 0)
it2 = prime.erase(it2);
else
++it2;
}
if (*it1 < 1000)
it1 = prime.erase(it1);
else
++it1;
}
, it2 it1, it2 - it2 = it1 + 1. .