Известно что метод end() возвращает итератор следующий за последним, как может быть за последнем итератором еще один итератор ведь последний итератор последний.
Представьте массив, скажем,
int a[5];
Вот этот end() - это указатель на элемент, следующий за последним - на a[5]. Реально его нет, вы не имеете права к нему обращаться...
Но можете использовать его для ограничений цикла - типа
for(int* i = a; i != a+5; ++i) ...
И не более того. Но обращаться с помощью такого итератора к элементу нельзя!
В футболе это место за линией. Когда мяч пересекает линию, игра должна возобновляться с новыми условиями. В символьных массивах это символ '\0', ну и т.д... X.end(), Это итератор обьекта Х, имеющий адрес места сразу за пределом обьекта, чтобы было легче выражаться, что "поле закончилось".
Сборка персонального компьютера от Artline: умный выбор для современных пользователей