Używanie std :: deque :: iterator (w C ++ STL) do wyszukiwania i usuwania pewnych elementów

Wystąpił problem z wywołaniem następującego kodu:

#include<deque>
using namespace std;

deque<int> deq = {0,1,2,3,4,5,6,7,8};

for(auto it = deq.begin(); it != deq.end(); it++){
    if(*it%2 == 0)
        deq.erase(it);
}

co spowodowało błąd segmentacji. Po przeanalizowaniu problemu odkryłem, że problem tkwi w sposobie, w jaki STL zarządza iteratorami dla deques: jeśli usuwany element znajduje się bliżej końca deque, iterator wskazujący na wymazany element będzie teraz wskazywał NASTĘPNY element, ale nie poprzedni element jakovector::iterator robi. Rozumiem, że modyfikując warunek pętli zit != deq.end() doit < deq.end() może rozwiązać ten problem, ale zastanawiam się, czy istnieje sposób na przemieszczenie i wymazanie określonego elementu w deque w „standardowej formie”, aby kod mógł być również kompatybilny z innymi typami kontenerów.

questionAnswers(2)

yourAnswerToTheQuestion