C++ named requirements: LegacyForwardIterator
A LegacyForwardIterator is a LegacyIterator that can read data from the pointed-to element.
Unlike LegacyInputIterator and LegacyOutputIterator, it can be used in multipass algorithms.
If a LegacyForwardIterator it
originates from a Container, then it
's value_type is the same as the container's, so dereferencing (*it) obtains the container's value_type.
Requirements
The type It
satisfies LegacyForwardIterator if
- The type
It
satisfies LegacyInputIterator - The type
It
satisfies DefaultConstructible - Objects of the type
It
provide multipass guarantee described below - The type
std::iterator_traits<It>::reference
must be exactly
-
T&
ifIt
satisfies LegacyOutputIterator (It
is mutable) -
const T&
otherwise (It
is constant),
-
- (where
T
is the type denoted by std::iterator_traits<It>::value_type)
- Equality and inequality comparison is defined over all iterators for the same underlying sequence and the value initialized-iterators (since C++14).
And, given
-
i
, dereferenceable iterator of typeIt
-
reference,
the type denoted bystd::iterator_traits<It>::reference
The following expressions must be valid and have their specified effects
Expression | Return type | Equivalent expression | Notes |
---|---|---|---|
i++ | It | It ip=i; ++i; return ip; | |
*i++ | reference |
A mutable LegacyForwardIterator is a LegacyForwardIterator that additionally satisfies the LegacyOutputIterator requirements.
Multipass guarantee
Given a
and b
, dereferenceable iterators of type It
- If
a
andb
compare equal (a == b
is contextually convertible totrue
) then either they are both non-dereferenceable or*a
and*b
are references bound to the same object - If
*a
and*b
refer to the same object, thena
==b
. - Assignment through a mutable
ForwardIterator
iterator cannot invalidate the iterator (implicit due toreference
defined as a true reference) - incrementing a copy of
a
does not change the value read froma
(formally, eitherIt
is a raw pointer type or the expression (void)++It(a), *a is equivalent to the expression *a) -
a == b
implies++a == ++b
Singular iteratorsA value-initialized LegacyForwardIterator behaves like the past-the-end iterator of some unspecified empty container: it compares equal to all value-initialized LegacyForwardIterators of the same type. |
(since C++14) |
ConceptFor the definition of std::iterator_traits, the following exposition-only concept is defined.
where the exposition-only concept |
(since C++20) |
See also
(C++20) |
specifies that an input_iterator is a forward iterator, supporting equality comparison and multi-pass (concept) |
Iterator library | provides definitions for iterators, iterator traits, adaptors, and utility functions |