Если под словом «работает» вы подразумеваете «он не взрывается с моей текущей версией компилятора и параметрами вызова», то да, назначение единственного итератора может «работать».На самом деле, код
typedef std::vector<int>::iterator iterator;
iterator it; // Singular
iterator it2 = it; // Works
приводит к неопределенному поведению, так что вы можете решить, что может случиться с вашим компилятором.
Стандарт C ++ говорит об этом (раздел[lib.iterator.requirements] / 5):
[...] Результаты большинства выражений не определены для единичных значений;единственное исключение - это присвоение не единственного значения итератору, который содержит единственное значение.В этом случае единственное значение перезаписывается так же, как и любое другое значение.Разыменовываемые значения и значения конца-конца всегда не единственные.
Таким образом, в конечных диапазонах do работают подобно одиночным итераторам.Это просто не работает так, как хотелось бы.Я думаю, что лучший способ - использовать пустой диапазон (явно созданный для неособых итераторов), когда данные еще не готовы, вместо единственного диапазона.