Эта строка
numbers.erase(numbers.begin()+d-1, numbers.end()+e);
не может быть правильной. Увеличение итератора end
никогда не даст вам действительного итератора. Не совсем понятно, что вы хотите сделать, но если вы хотите стереть элементы в диапазоне индексов [d,e)
, тогда это будет
numbers.erase(numbers.begin()+d, numbers.begin()+e);
Примечание: для первого не нужно +1
, потому что первое включительно. И вы получаете итератор для e
-го элемента, увеличивая итератор begin
, а не итератор end
(хорошо ... Я предполагаю, что общий подсчет на основе 0, ie, "первым" элементом является 0-й элемент;).
Кроме того, как уже упоминалось в комментариях, перед вызовом erase
следует проверить, находятся ли введенные пользователем значения в диапазоне. erase
не проверяет границы. Если вы передадите неверные итераторы, вы получите неопределенное поведение.