std::bidirectional_iterator
Min standard notice:
Header: <iterator>
The concept bidirectional_iterator refines forward_iterator by adding the ability to move an iterator backward.
# Declarations
template< class I >
concept bidirectional_iterator =
std::forward_iterator<I> &&
std::derived_from</*ITER_CONCEPT*/<I>, std::bidirectional_iterator_tag> &&
requires(I i) {
{ --i } -> std::same_as<I&>;
{ i-- } -> std::same_as<I>;
};
(since C++20)
# Notes
Unlike the LegacyBidirectionalIterator requirements, the bidirectional_iterator concept does not require dereference to return an lvalue.
# Example
#include <cstddef>
#include <iterator>
struct SimpleBidiIterator
{
using difference_type = std::ptrdiff_t;
using value_type = int;
int operator*() const;
SimpleBidiIterator& operator++();
SimpleBidiIterator operator++(int)
{
auto tmp = *this;
++*this;
return tmp;
}
SimpleBidiIterator& operator--();
SimpleBidiIterator operator--(int)
{
auto tmp = *this;
--*this;
return tmp;
}
bool operator==(const SimpleBidiIterator&) const;
};
static_assert(std::bidirectional_iterator<SimpleBidiIterator>);