У вас неопределенное поведение, потому что вы разыменовываете недействительный итератор в delete *it;
. Чтобы решить вашу непосредственную проблему, вам нужно что-то вроде
int * to_del = *it;
it = queue.erase(it);
delete to_del;
Однако вам также следует избегать использования int *
, где достаточно int
, и записи циклов, когда что-то применимо в <algorithm>
* 1008. *
bool is_even(int i) { return (i % 2) == 0; }
std::deque<int> queue { 0, 2, 3, 4, 5 };
queue.erase(std::remove_if(queue.begin(), queue.end(), is_even), queue.end());