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.
The type It satisfies LegacyForwardIterator if.
It satisfies LegacyInputIterator It satisfies DefaultConstructible It provide multipass guarantee described below T be the value type of It. The type std::iterator_traits<It>::reference must be either T& or T&& (since C++11) if It satisfies LegacyOutputIterator (It is mutable), or const T& or const T&& (since C++11) otherwise (It is constant), T is the type denoted by std::iterator_traits<It>::value_type) And, given.
i, dereferenceable lvalue of type It reference, the type denoted by std::iterator_traits<It>::reference The following expressions must be valid and have their specified effects.
| Expression | Return type | Equivalent expression |
|---|---|---|
i++ | It |
It ip = i; ++i; return ip; |
*i++ | reference |
A mutable LegacyForwardIterator is a LegacyForwardIterator that additionally satisfies the LegacyOutputIterator requirements.
Given a and b, dereferenceable iterators of type It.
a and b compare equal (a == b is contextually convertible to true) then either they are both non-dereferenceable or *a and *b are references bound to the same object. *a and *b refer to the same object, then a == b. ForwardIterator iterator cannot invalidate the iterator (implicit due to reference defined as a true reference). a does not change the value read from a (formally, either It 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
where the exposition-only concept | (since C++20) |
Unlike the std::forward_iterator concept, the LegacyForwardIterator requirements requires dereference to return a reference.
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3798 | C++20 | __LegacyForwardIterator requires std::iter_reference_t<It> to be an lvalue reference type | also allows rvalue reference |
|
(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 |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/ForwardIterator