Использование std :: deque :: iterator (в C ++ STL) для поиска и удаления определенных элементов

Я столкнулся с проблемой при вызове следующего кода:

#include
using namespace std;

deque 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);
}

что привело к ошибке сегментации. Изучив проблему, я обнаружил, что проблема заключается в том, как STL управляет итераторами для запросов: если удаляемый элемент находится ближе к концу deque, итератор, используемый для указания на удаленный элемент, теперь будет указывать на СЛЕДУЮЩИЙ элемент, но не предыдущий элемент, какvector::iterator делает. Я понимаю, что изменение условия цикла изit != deq.end() вit < deq.end() может решить проблему, но мне просто интересно, есть ли способ пройти и стереть определенный элемент в деке встандартная форма" так что код может быть совместим с другими типами контейнеров.

Ответы на вопрос(2)

Ваш ответ на вопрос