Я думаю, что соответствующая часть C++17
стандарта здесь
27.2.1 В общем [ iterator.requirements.general ]
...
8 Итератор j
называется достижимым от итератораi
тогда и только тогда, когда существует конечная последовательность применений выражения ++i
, которая составляет i == j
.Если j
равно достижимо из i
, они относятся к элементам той же последовательности.
9 Большая часть алгоритмической библиотекишаблоны, которые работают со структурами данных, имеют интерфейсы, которые используют диапазоны.Диапазон - это пара итераторов, которые обозначают начало и конец вычисления.Диапазон [i, i)
- пустой диапазон;как правило, диапазон [i, j)
относится к элементам в структуре данных, начиная с элемента, на который указывает i
, и вплоть до, но не включая элемент, на который указывает j
.Диапазон [i, j)
действителен тогда и только тогда, когда j
достижим с i
.Результат применения функций в библиотеке к недопустимым диапазонам не определен.
Итак, извлечение соответствующих частей:
8 Итератор j
называется достижимым от итератора i
тогда и только тогда, когда существует конечная последовательность применений выражения ++i
, которая составляет i == j
...
9 ... Диапазон [i, j)
действителен тогда и только тогда, когда j
достижим из i
....
Так что кажется, что«допустимый диапазон» - это пара итераторов , которые принадлежат к тому же контейнеру (или массиву), причем j
находится дальше, чем i
.
Но также не забывайте:
в целом, диапазон [i, j)
относится к элементам в структуре данных, начиная с элемента, на который указывает i
, и вплоть до, но не включая, указанного элементак j
.
Таким образом, все итераторы между i
и j
(но не обязательновключая j
) должно быть "в структуре данных" (т.е.не за пределами) .