Использование 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()
может решить проблему, но мне просто интересно, есть ли способ пройти и стереть определенный элемент в деке встандартная форма" так что код может быть совместим с другими типами контейнеров.