Namespaces
Variants

std::experimental::ranges:: ForwardIterator

From cppreference.net
Определено в заголовочном файле <experimental/ranges/iterator>
template < class I >

concept bool ForwardIterator =
InputIterator < I > &&
DerivedFrom < ranges :: iterator_category_t < I > , ranges :: forward_iterator_tag > &&
Incrementable < I > &&

Sentinel < I, I > ;
(ranges TS)

Концепт ForwardIterator<I> расширяет InputIterator добавлением сравнения на равенство и гарантии многопроходности.

Область определения == для forward iterators — это область итераторов над одной и той же базовой последовательностью, за исключением того, что итераторы одного типа, инициализированные значением по умолчанию, могут сравниваться друг с другом и должны давать результат равенства.

Указатели и ссылки, полученные из прямого итератора в диапазоне [ i , s ) должны оставаться действительными, пока [ i , s ) продолжает обозначать диапазон.

Пусть a и b будут двумя разыменуемыми итераторами типа I . ForwardIterator<I> удовлетворяется только если:

  • a == b подразумевает ++ a == ++ b ; и
  • Выражение ( [ ] ( X x ) { ++ x ; } ( a ) , * a ) эквивалентно * a , т.е. инкремент копии a не влияет на результат разыменования a .

Это известно как multi-pass guarantee .

Примечания

Прямой итератор не может быть «сохраняющим»: он не может возвращать ссылку на объект внутри себя, поскольку такие ссылки будут аннулированы при уничтожении прямого итератора.