2013-09-12 3 views

ответ

2

недопустимое положение или диапазон вызывает неопределенное поведение.

От here

Итератора позы должны быть действительными и разыменовываемыми. Таким образом, итератор end() не может быть использован как значение для pos.

+1

Хорошо, что отстой. Спасибо. Интересно, почему они решили пойти так: делает 'v.erase (std :: find (v.begin(), v.end(), item))' invalid. –

+0

@ VioletGiraffe, возможно, вы ищете [erase-remove idiom] (http://en.wikipedia.org/wiki/Erase-remove_idiom)? 'v.erase (std :: remove (v.begin(), v.end(), item), v.end());' – Fiktik

+0

@Fiktik: Хмм, возможно. Но выглядит как избыток для удаления всего одного элемента. –

0

Для одного аргумента перегружать она недействительна передать end() к std::vector::erase, потому что единственный аргумент перегрузки сотрет элемент в этой позиции. В позиции end() нет элемента, так как end() один за последним элементом.

Однако end() могут быть переданы перегрузки erase, которая принимает диапазон итератора:

vec.erase(vec.begin(), vec.end()) 
+0

Я имел в виду единственный аргумент 'erase' overload. –

Смежные вопросы